gpt4 book ai didi

c++ - 关于静态变量的问题

转载 作者:太空狗 更新时间:2023-10-29 23:54:11 26 4
gpt4 key购买 nike

我阅读了很多关于静态变量的文档。这是一个我不明白的例子。假设类中的静态变量声明如下:

class Something
{
public:
static int s_nValue;
};

int Something::s_nValue = 1;

int main()
{
Something::s_nValue = 2;
std::cout << Something::s_nValue;
return 0;
}

我的问题是:我们已经在类中声明了s_nvalue,为什么还要重新定义呢?如果我们之前不写int,就会报错。为什么会这样?

最佳答案

在通常的 C++ 程序中,您的类在 header 中定义,所有使用它们的源文件都包含这些 header 。因此,如果它按您预期的方式工作,每个源文件都会有自己的静态变量拷贝,而实际上它们应该共享一个拷贝。这将违反单一定义规则……每个对象只能定义为存在于一个地方。

因此,在类中声明变量只是向编译器宣布某处将有一个具有此名称和类型的变量;它不指示编译器为其分配空间。此时,该变量在包含它的任何源文件中都保持未定义状态。然后,在一个特定的源文件 [通常是该特定类的实现文件] 中,您提供了一个实际的定义,即 int Something::s_nValue; 行。这要求编译器为变量分配空间,以便它只存在于那个位置,并且当您将所有目标文件链接在一起时不会出现歧义。

关于c++ - 关于静态变量的问题,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/7546107/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com