考虑以下结构:
struct A
{
int i;
};
struct B
{
int i = 0;
};
为什么我可以使用统一初始化器初始化A类对象,而我无法初始化B类对象?
A a{1};
B b{1}; //ill formed
当使用默认值初始化成员时,编译器正在做什么?
答案 0 :(得分:8)
在C ++ 11中,由于为非静态数据成员提供了相同的初始化程序,B
不是聚合。这意味着除非提供合适的构造函数,否则不能使用大括号括起的初始值设定项。
在C ++ 14中放宽了这个限制。在该标准中,B
是聚合,初始化有效。