全局变量和静态全局变量
Global variable and static global variable
global variable/const 和 global static variable/const 在 C++ 中有什么区别吗?在cpp文件或头文件中声明。
static const int x1 = someFunction(5);
const int x2 = someFunction(6);
static int x3 = someFunction(5);
int x4 = someFunction(6);
int main()
{
...
注意:这仅适用于变量不是常量的情况。我已应 OP 的要求取消删除此答案
static int x1
具有 内部链接 ,这意味着它只能通过它在(此 cpp 文件)中定义的翻译单元的名称访问。如果此行在 header 文件中,则包含 header 的每个文件都将获得自己的变量副本。
int x2
具有 外部链接 ,这意味着另一个翻译单元(cpp 文件)可以在全局范围内具有 extern int x2;
并访问该变量。如果此行在 header 文件中,并且多个文件包含 header,则您违反了 One Definition Rule,因为每个包含都定义了一次变量。您必须在 header 中使用 extern int x2;
,然后在单个 cpp 文件中使用 int x2 = ...;
以避免多重定义。
见https://en.cppreference.com/w/cpp/language/storage_duration
案例一:对于常量对象
相似度
在两个版本中,变量都有 内部链接。也就是说,x1
和x2
都有内部链接。
差异
在 static const int x1
的情况下,变量是 显式静态的 而在 const int x2
的情况下,变量是 隐式静态的 .但请注意,它们仍然具有 内部链接 .
案例 II:For 非常量对象
相似度
x3
和x4
都是非常量,这意味着我们可以修改它们。
差异
变量 x3
具有 内部链接 而变量 x4
具有 外部链接.
global variable/const 和 global static variable/const 在 C++ 中有什么区别吗?在cpp文件或头文件中声明。
static const int x1 = someFunction(5);
const int x2 = someFunction(6);
static int x3 = someFunction(5);
int x4 = someFunction(6);
int main()
{
...
注意:这仅适用于变量不是常量的情况。我已应 OP 的要求取消删除此答案
static int x1
具有 内部链接 ,这意味着它只能通过它在(此 cpp 文件)中定义的翻译单元的名称访问。如果此行在 header 文件中,则包含 header 的每个文件都将获得自己的变量副本。
int x2
具有 外部链接 ,这意味着另一个翻译单元(cpp 文件)可以在全局范围内具有 extern int x2;
并访问该变量。如果此行在 header 文件中,并且多个文件包含 header,则您违反了 One Definition Rule,因为每个包含都定义了一次变量。您必须在 header 中使用 extern int x2;
,然后在单个 cpp 文件中使用 int x2 = ...;
以避免多重定义。
见https://en.cppreference.com/w/cpp/language/storage_duration
案例一:对于常量对象
相似度
在两个版本中,变量都有 内部链接。也就是说,x1
和x2
都有内部链接。
差异
在 static const int x1
的情况下,变量是 显式静态的 而在 const int x2
的情况下,变量是 隐式静态的 .但请注意,它们仍然具有 内部链接 .
案例 II:For 非常量对象
相似度
x3
和x4
都是非常量,这意味着我们可以修改它们。
差异
变量 x3
具有 内部链接 而变量 x4
具有 外部链接.