我刷新我的價值初始化與默認初始化的理解,和整個this傳來:爲什麼這個簡單的賦值未定義的行爲?
struct C {
int x;
int y;
C() { }
};
int main() {
C c = C();
}
顯然,這是UB因爲
在C()的情況下,有一個構造函數能夠對 初始化x和y成員,因此不會進行初始化。嘗試將C()複製到c因此會導致未定義的行爲。
我想我明白爲什麼,但我不能肯定。有人可以詳細說明嗎?
難道說這也是UB?
int x; x = x;
順便說一句,關於價值初始化,以下保證爲零?
int x = int();
不確定你的意思。如果你的意思是x和y的值將被初始化,那麼是的,但是你已經回答了你自己的問題(因爲構造函數沒有這樣做)。至於C c = C();我認爲這完全有效。 – Sid 2012-02-06 16:42:22
我認爲這是完全有效的,直到有人聲稱否則。當我讀到它時,第一個片段只能通過UB,如果第二個片段也是這樣,否則它是一個簡單的未初始化的值,沒有鼻甲。 – spraff 2012-02-06 16:45:05
@Sid:不,使用未初始化對象的值會導致未定義的行爲。 – 2012-02-06 16:54:45