預設情況下,動態分配的物件是預設初始化的,這意味著內建型別或組合型別的物件值將是未定義的,而類型別物件將採用預設建構函式進行初始化。
// 預設初始化
int i;
int *pi = new int; // 預設初始化,採用預設建構函式,內建型別無缺省構造,值不確定
string str;
string *pstr = new string; // 預設初始化,採用預設建構函式,初始化為空字元""
// 內建型別:值初始化
int i2{}; // 現代c++,一致的初始化{},值為0
int *pi1 = new int(); // 值初始化,值為0
int *pi2 = new int{}; // 列表初始化,值為0
// 類型別:值初始化
string str2{}; // 現代c++,一致的初始化{},空字串""
string *pstr1 = new string(); // 值初始化,空字串""
string *pstr2 = new string{}; // 列表初始化,空字串""
疑問:為什麼c++對內建型別區分預設初始化和值初始化,而預設初始化是不確定的,不可以將內建型別的預設初始化行為和值初始化一致呢??
參考c++ primer中文版 第五版 12章
C 預設初始化
如果定義變數時沒有指定初始值,則變數被預設初始化,此時變數被賦予了預設值,預設值到底是什麼由變數型別和位置決定。函式體外初始化為0,函式體內不被初始化,使用new初始化的值是隨機的。int g value intmain void 定義乙個類變數但沒有指定初始值時,會使用預設建構函式來初始化,所以沒...
C 預設初始化
預設初始化,顧名思義,即為在定義變數時如果沒有為其指定初始化值,則該變數會被c 編譯器賦予預設的值。而變數被賦予的預設值到底是什麼,則取決於變數的資料型別和變數的定義位置。規則1 內建型別的變數如果初始化,則它的預設初始化值取決於定義它的位置 定義在任何函式之外的未初始化的內建型別變數 也就是全域性...
預設初始化
雖然保險的做法是對每個變數都顯示初始化,但是了解一下預設初始化的規則也是很有必要的。1.定義於任何函式體之外的變數被初始化為0。2.定義在函式體內部的區域性變數不會被預設初始化。所以,它的值是未定義的 這裡的 未定義 我的理解 變數所分配記憶體中的二進位制資料,分配時是什麼就是什麼,機器會按照變數的...