考虑下面的程序:(见现场演示here.)C++的命名空间范围的初始化变量
#include <iostream>
inline double fun()
{
return 3.0;
}
extern double m;
double d2=m;
int main()
{
std::cout<<d2;
}
double m=fun();
我期待获得程序的输出为3.0,但它给了我输出为0,为什么?
它看起来像变量d2静态初始化?
不应该动态初始化它吗?
我已经在g ++ 4.8.1上测试过它,4.9.2 & MSVS 2010 &得到0作为输出。
'它看起来像变量d2静态初始化?'排序。程序加载时,'d2'和'm'都会初始化为0。然后'd2'从'm'(它仍然是0)初始化。最后,'m'从'fun()'初始化。 –
这是为什么?您正在打印'd2',而不是'm'。如果你有'int x = 0; int y = x; x = 42;'',你是否希望'y'被追溯设置为42? –
[This answer](http://stackoverflow.com/a/22117407/1413133)将会有所帮助。 –