使用默认值的 C++ 统一初始化
C++ uniform initialization with default values
考虑以下结构:
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
是一个集合,初始化有效。
考虑以下结构:
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
是一个集合,初始化有效。