使用常规构造函数进行聚合初始化
Aggregate initialization with regular constructor
假设我有以下类:
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++的下一个版本将允许在聚合中使用大括号或相等的初始值设定项。)
相关文章:
- 是否可以初始化不可复制类型的成员变量(或基类)
- C++使用整数的压缩数组初始化对象
- C++初始化基类
- 多成员Constexpr结构初始化
- 复制列表初始化的隐式转换的等级是多少
- 内联映射初始化的动态atexit析构函数崩溃
- 如何在C++中初始化嵌套类中的2个memeber
- 如何声明特征矩阵,然后通过嵌套循环初始化它
- 没有用于初始化C++中的变量模板的匹配构造函数
- 在未初始化映射的情况下,将值插入到映射的映射中
- C++成员初始化
- 为什么在C++中首先初始化成员类
- 同时具有"聚合初始化"和"模板推导"
- 初始化具有非默认构造函数的std::数组项的更好方法
- 如何初始化堆,以便静态构造函数可以在常规 MFC dll 中使用堆?
- 为什么C++列表初始化也考虑常规构造函数?
- 如何使用常规构造函数模式初始化 C++ 11 标准容器
- 在常规初始化中发生意外转换
- 为什么我可以从{}初始化一个常规数组,但不能从std::数组初始化?
- 使用常规构造函数进行聚合初始化