C 11 具有非靜態成員初始化器的類別的聚合初始化
在C 11 中,具有使用者定義構造函數和私有建構函數的結構和類別或受保護的非靜態資料成員不被視為聚合。從歷史上看,具有非靜態成員初始值設定項的類別也是如此,即使它們缺少使用者定義的建構子。
但是,在 C 14 中,此限制被刪除。現在,具有非靜態成員初始值設定項的類別仍然可以是聚合,只要它們滿足聚合的其他要求:
例如:
struct A { int a = 3; int b = 3; }; int main() { A a{0, 1}; // This is now allowed in C++14 return 0; }
此更改的動機是希望將聚合初始化的行為與直覺保持一致。類別內初始值設定項本質上等同於使用者定義的建構函數,但阻止類別成為聚合是違反直覺的。
自 G 5.0 起,具有非靜態資料成員初始值設定項的 C 14 聚合已經支援使用 std=c 1y 或 -std=c 14。
以上是具有非靜態成員初始值設定項的類別可以在 C 14 中聚合嗎?的詳細內容。更多資訊請關注PHP中文網其他相關文章!