C++ 命名需求: DefaultConstructible
来自 cppreference.com
指定类型的实例可以被默认构造。
内容 |
[编辑] 要求
如果以下所有语句和表达式都有效,并且具有其指定的效应,则类型 T
满足 DefaultConstructible
表达式/语句 | 后置条件 |
---|---|
T u; | 对象 u 被 默认初始化。 |
T u{}; | 对象 u 被 值初始化 或 聚合初始化。 |
T()
T{} |
类型 T 的临时对象被 值初始化 或 聚合初始化。 |
[编辑] 注释
对于非聚合类类型的对象,必须定义一个公共 默认构造函数(用户定义或隐式定义)以满足 DefaultConstructible。
非类对象类型的非 const 对象总是 DefaultConstructible。
Const 非类类型不是 DefaultConstructible。
如果任何成员是类对象类型的对象,则 Const 聚合类型不是 DefaultConstructible。
非对象类型(函数类型、引用类型以及(可能具有 cv 限定符的)类型 void)以及 Const 非对象类型永远不是 DefaultConstructible。
[编辑] 缺陷报告
以下更改行为的缺陷报告被追溯应用于先前发布的 C++ 标准。
DR | 应用于 | 发布的行为 | 正确行为 |
---|---|---|---|
LWG 724 | C++98 | DefaultConstructible 的要求缺失 | 添加 |
LWG 2170 | C++98 | 使用空的初始化器初始化 DefaultConstructible 类型对象的 空初始化器只能导致值初始化 |
还可以导致 聚合初始化 |
[编辑] 参见
检查类型是否具有默认构造函数 (类模板) | |
(C++20) |
指定类型的对象可以被默认构造 (概念) |