使用默认值的 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 是一个集合,初始化有效。