我一直認爲創建一個新對象總是會調用對象的默認構造函數,而構造函數是顯式的還是由編譯器自動生成都沒有區別。據this highly regarded answer到一個不同的問題,這改變了C++ 98和C++ 03之間一種微妙的方式和現在的作品,像這樣:C++ 03中default-initialize和value-initialize的區別?
struct B { ~B(); int m; }; // non-POD, compiler generated default ctor
new B; // default-initializes (leaves B::m uninitialized)
new B(); // value-initializes B which zero-initializes all fields since its default ctor is compiler generated as opposed to user-defined.
誰能告訴我:
- 爲什麼標準發生了變化,例如,這給了什麼好處呢?
- 什麼exacly做的術語「默認初始化」和「值初始化」代表什麼?
- 該標準的相關部分是什麼?
新C++ 11標準的相關部分是8.5(「初始化器」)子句5,6,7。 –
也許它給了人們使用默認ctor的選項。在舊版本的C++中,當沒有參數時通常會錯過括號。因此,對新選項加上括號會影響較少的遺留代碼。 – QuentinUK
我不會稱之爲改變,而是改正。它至少在例如上下文中是有意義的。 std :: map其中由[]創建的值是初始值,因此例如std :: map所有的U *都被初始化爲0 –
PlasmaHH