如果所有的類/結構數據成員都缺少初始值設定項,則可以使用統一的初始化語法來構造該對象。爲什麼非靜態數據成員初始值設定項會破壞統一的初始化語法?
struct foo
{
int i;
float f;
};
...
foo bar{ 5, 3.141f };
但是,如果一個或多個成員具有初始值設定項,則統一的初始化語法將變爲無效。
struct foo
{
int i;
float f = 0;
};
...
foo bar{ 5, 3.141f }; // Compiler error.
我推測,除了數據成員初始化的自動實現一個或多個默認的構造函數和抑制initialization_list
構造函數的默認實現。這是預期的標準嗎?它爲什麼這樣工作?
沒有「initializer_list'構造函數的默認實現」。你在第一個片段中有什麼叫*聚合初始化*。 – Xeo
要補充@ Xeo的評論,請參閱* 8.5.1 [dcl.init.aggr] *和* 8.5.4 [dcl.init.list] *。 – syam
相關:http://stackoverflow.com/questions/4178175/what-are-aggregates-and-pods-and-how-why-are-they-special/7189821#7189821 –