1
考慮以下結構:C++均勻初始化用默認值
struct A
{
int i;
};
struct B
{
int i = 0;
};
爲什麼可以初始化使用統一的初始化類型A的對象,我不能初始化類型B的對象?
A a{1};
B b{1}; //ill formed
當默認值用於初始化成員時,編譯器在做什麼?
考慮以下結構:C++均勻初始化用默認值
struct A
{
int i;
};
struct B
{
int i = 0;
};
爲什麼可以初始化使用統一的初始化類型A的對象,我不能初始化類型B的對象?
A a{1};
B b{1}; //ill formed
當默認值用於初始化成員時,編譯器在做什麼?
在C++ 11中,B
由於對非靜態數據成員具有相同的初始值設定項而不是聚合。這意味着除非提供合適的構造函數,否則不能使用大括號初始化器。
這個限制在C++ 14中已經放寬了。在該標準中,B
是一個聚合,並且初始化是有效的。