考慮下面的程序:(見現場演示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)將會有所幫助。 –