使用默认值进行C ++统一初始化

时间:2015-01-07 10:47:01

标签: c++ c++11

考虑以下结构:

struct A
{
    int i;
};

struct B
{
    int i = 0;
};

为什么我可以使用统一初始化器初始化A类对象,而我无法初始化B类对象?

A a{1};
B b{1}; //ill formed

当使用默认值初始化成员时,编译器正在做什么?

1 个答案:

答案 0 :(得分:8)

在C ++ 11中,由于为非静态数据成员提供了相同的初始化程序,B不是聚合。这意味着除非提供合适的构造函数,否则不能使用大括号括起的初始值设定项。

在C ++ 14中放宽了这个限制。在该标准中,B是聚合,初始化有效。