全局变量和静态全局变量

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

案例一:对于常量对象

相似度

在两个版本中,变量都有 内部链接。也就是说,x1x2都有内部链接

差异

static const int x1 的情况下,变量是 显式静态的 而在 const int x2 的情况下,变量是 隐式静态的 .但请注意,它们仍然具有 内部链接 .

案例 II:For 非常量对象

相似度

x3x4都是非常量,这意味着我们可以修改它们。

差异

变量 x3 具有 内部链接 而变量 x4 具有 外部链接.