gpt4 book ai didi

c++ - 全局变量被初始化两次?

转载 作者:太空宇宙 更新时间:2023-11-04 15:08:02 24 4
gpt4 key购买 nike

文件1.cpp

#include <iostream>

extern int u;
int i=9;
int j=i+9;
int main()
{
std::cout<<u;
return 0;
}

文件2.cpp

extern int j;
int u=j+9;

结果是 u=9 而不是 27

这表明 j 被初始化了两次 - 首先是零(由于 变量 u 得到值 9)然后是 18

这可能吗??我对初始化的意义在这里被破坏了。

我还尝试使变量 j 常量以查看接下来会发生什么

file1.cpp//将j改为常量后

extern int u;
int i=9;
extern const int j=i+9;

这与之前的输出相同。

但是,如果我将 int j=i+9;(在 file1.cpp 中)更改为 int j=9;

令人惊讶的是,我得到了正确的值,即 u=18;

最佳答案

全局变量的初始化顺序声明在不同的 translation Units 未指定。

全局变量 ui, j 驻留在代码中的不同翻译单元中,所以 u 的顺序code> 首先被初始化,或者 iju 未指定之前被初始化。
这会在您的代码中调用一个未定义的行为。
这会在您的代码中调用未指定的行为

但是,请注意,同一翻译单元中全局变量的初始化顺序是明确定义的。
即:明确定义 i 将在您的代码中的 j 之前初始化。

你看到的是的经典案例Static Initialization Fiasco .

关于c++ - 全局变量被初始化两次?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/9325870/

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