假设我有以下课程:
class dog
{
public:
int age;
int bun;
};
现在这句话
dog d = {12,5}
会将age
初始化为12,将bun
初始化为5
现在,如果上面的类具有无参数构造函数,则上述语句初始化不起作用。如果有人能解释为什么会这样,我将不胜感激?
答案 0 :(得分:4)
当类dog d = { 12, 5 };
是聚合时,语法dog
是聚合初始化。用户提供的构造函数可以防止类成为聚合;比照C ++ 11 8.5.1 / 1:
聚合是一个数组或类(第9条),没有用户提供的构造函数(12.1),没有大括号或等于初始化静态数据成员(9.2),没有私有或受保护的非静态数据成员(第11条),没有基类(第10条),没有虚函数(10.3)。
(我相信C ++的下一个版本将允许在聚合中使用大括号或等于初始化器。)