只是偶然發現了這個問題,誰能解釋一下這裏發生了什麼?爲什麼這個成員變量沒有正確初始化?
struct Foo {
int i;
~Foo() {
std::cout << i << std::endl;
}
};
void bar()
{
Foo f;
f.i = 1;
f = Foo();
f.i = 2;
}
我得到以下輸出:
-85899... (gibberish = "default" value for uninitialized int)
2
,我預計
1
2
爲什麼是它f.i = 1;
似乎這裏有沒有影響?
因爲f的析構函數,當你一個新的Foo值分配給它不會被調用。第一個輸出可能來自f = Foo()中臨時的析構函數。 – 2013-05-10 12:46:06
@mfontanini沒有未定義的行爲。未初始化時'i'的值是不確定的。行爲是定義的,但不是確定的。完全不同的兩件事。 – pmr 2013-05-10 12:48:55
你使用的是古老的編譯器嗎?自2003年以來(甚至可能是1998年),'Foo()'應該初始化臨時值,並將'i'設置爲'0'。 – 2013-05-10 13:20:03