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

Aggregate initialization with regular constructor

本文关键字:初始化 常规 构造函数      更新时间:2023-10-16

假设我有以下类:

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

现在这个声明

dog d = {12,5}

将初始化age到12和bun到5

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

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

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

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