gpt4 book ai didi

c++ - C++ 中的静态变量

转载 作者:IT老高 更新时间:2023-10-28 13:21:21 25 4
gpt4 key购买 nike

我想知道头文件中的静态变量与类中声明的变量有什么区别。在头文件中声明静态变量时,其范围仅限于 .h 文件或所有单元。当在类中声明时,通常静态变量会在 .cpp 文件中初始化,对吗?那么这是否意味着静态变量范围仅限于 2 个编译单元?

最佳答案

对不起,我乱序回答你的问题,这样更容易理解。

When static variable is declared in a header file is its scope limited to .h file or across all units.

没有“头文件范围”这样的东西。头文件被包含到源文件中。翻译单元是源文件包括头文件中的文本。您在头文件中写入的任何内容都会复制到每个包含源文件中。

因此,在头文件中声明的静态变量就像每个单独的源文件中的静态变量。

由于以这种方式声明一个变量static意味着内部链接,每个翻译单元#include你的头文件都有自己的自己的individual 变量(在您的翻译单元之外不可见)。这通常不是您想要的。

I would like to know what is the difference between static variables in a header file vs declared in a class.

在类声明中,static表示类的所有实例共享这个成员变量;即,您可能有数百个这种类型的对象,但每当这些对象之一引用 static(或“类”)变量时,所有对象的值都是相同的。您可以将其视为“全局类”。

Also generally static variable is initialized in .cpp file when declared in a class right ?

是的,one(并且只有one)翻译单元必须初始化类变量。

So that does mean static variable scope is limited to 2 compilation units ?

正如我所说:

  • header 不是编译单元,
  • static 表示完全不同的东西,具体取决于上下文。

全局 static 将范围限制为翻译单元。 static 类对所有实例都是全局的。

我希望这会有所帮助。

PS:检查 Chubsdad 答案的最后一段,关于如何在 C++ 中不应该使用 static 来指示内部链接,而是使用匿名命名空间。 (因为他是对的。;-))

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

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