C++ 使用常规构造函数聚合初始化

C++ 使用常规构造函数聚合初始化,c++,c++11,C++,C++11,假设我有以下课程: class dog { public: int age; int bun; }; 现在,这项声明 dog d = {12,5} 将age初始化为12,将bun初始化为5 现在,如果上面的类有一个无参数构造函数,那么上面的语句初始化将不起作用。如果有人能解释一下为什么会这样,我将不胜感激是聚合初始化。用户提供的构造函数防止类成为聚合;参见C++11 8.5.1/1: 聚合是一个数组或类(第9条),没有用户提供的构造函数(12.1),没有用于非静态数据

假设我有以下课程:

class dog
{
    public:
    int age;
    int bun;
};
现在,这项声明

dog d = {12,5}
age
初始化为12,将
bun
初始化为5


现在,如果上面的类有一个无参数构造函数,那么上面的语句初始化将不起作用。如果有人能解释一下为什么会这样,我将不胜感激dog是聚合时,code>是聚合初始化。用户提供的构造函数防止类成为聚合;参见C++11 8.5.1/1:

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


(我相信C++的下一个修订将允许括号或等于初始化集的聚合)。< /P> < P>语法>代码>狗D={ 12, 5 };<当类

dog
是聚合时,code>是聚合初始化。用户提供的构造函数防止类成为聚合;参见C++11 8.5.1/1:

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


(我相信C++的下一个修订版将允许括号中的初始化或等于初始化符)。这就是原因。标记为回答谢谢。这就是原因。标记为答案