[英]Behaviors of default initialization on struct fields
這樣編寫代碼時:
#include <iostream>
using namespace std;
struct ID {
char *name;
int age;
};
int main() {
ID a;
cout << (long)(a.name) << endl;
cout << a.age << endl;
// cout << (a.name == nullptr) << endl;
return 0;
}
結果是:
0
0
但是,當這樣寫時:
#include <iostream>
using namespace std;
struct ID {
char *name;
int age;
};
int main() {
ID a;
cout << (long)(a.name) << endl;
cout << a.age << endl;
cout << (a.name == nullptr) << endl;
return 0;
}
結果似乎很奇怪:
140735032148552
1545300144
0
這兩個版本的差異如何?
由於行為不確定 。 定義局部變量不會初始化它,結構的內容將是不確定的,並且使用它會導致所述UB。
我自己找到了答案。 謝謝! 皮爾博格,丹尼爾和帕斯坦尼斯。 您的回答和評論對我有很大幫助。
我的困惑來自“ C ++ Primer”中的一段。 萬一其他人有同樣的困惑,我在這里寫下我的理解。
原始字詞:
在新標准下,我們可以為數據成員提供類內初始化程序。 創建對象時,將使用類內的初始化程序來初始化數據成員。 沒有初始化程序的成員將被默認初始化(第2.2.1節,第43頁)。 因此,當我們定義Sales_data對象時,units_sold和Revenue將被初始化為0,而bookNo將被初始化為空字符串。
-“ C ++ Primer 5th Edition”
我以為結構中的字段遵循與全局變量相同的默認初始化規則(即,初始化為它們的零值)。 但實際上,它遵循與局部變量相同的規則,即:
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.