使用常规构造函数进行聚合初始化

时间:2014-04-20 22:12:30

标签: c++ c++11

假设我有以下课程:

class dog
{
    public:
    int age;
    int bun;
};

现在这句话

dog d = {12,5}

会将age初始化为12,将bun初始化为5

现在,如果上面的类具有无参数构造函数,则上述语句初始化不起作用。如果有人能解释为什么会这样,我将不胜感激?

1 个答案:

答案 0 :(得分:4)

当类dog d = { 12, 5 };是聚合时,语法dog聚合初始化。用户提供的构造函数可以防止类成为聚合;比照C ++ 11 8.5.1 / 1:

  

聚合是一个数组或类(第9条),没有用户提供的构造函数(12.1),没有大括号或等于初始化静态数据成员(9.2),没有私有或受保护的非静态数据成员(第11条),没有基类(第10条),没有虚函数(10.3)。

(我相信C ++的下一个版本将允许在聚合中使用大括号或等于初始化器。)