我在一本书中读到有关 SIOF 的内容,它给出了一个例子:
//file1.cpp
extern int y;
int x=y+1;
//file2.cpp
extern int x;
int y=x+1;
现在我的问题是:
在上面的代码中,会发生以下情况吗?
- 在编译 file1.cpp 时,编译器将 y 保留原样,即不为其分配存储空间。
- 编译器为 x 分配存储空间,但不对其进行初始化。
- 在编译 file2.cpp 时,编译器将 x 保留原样,即不为其分配存储空间。
- 编译器为 y 分配存储空间,但不初始化它。
- 在链接 file1.o 和 file2.o 时,现在先初始化 file2.o,所以现在:
x 的初始值是否为 0?或者没有被初始化?
初始化步骤在C++标准的3.6.2“非局部对象的初始化”中给出:
Step 1: x
and y
在任何其他初始化发生之前都被零初始化。
Step 2: x
or y
是动态初始化的 - 标准未指定哪一个。该变量将获得值1
因为另一个变量将被零初始化。
步骤3:另一个变量将被动态初始化,获取值2
.
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)