C++ 具名要求:可默认插入 (DefaultInsertable) (C++11 起)
来自cppreference.com
指定该类型的对象能以给定的分配器原位默认构造。
目录 |
[编辑] 要求
给定以下类型、值和表达式:
类型 | 定义 |
T
|
对象类型 |
A
|
分配器类型 |
X
|
满足以下所有条件的容器类型:
|
值 | 定义 |
m | A 类型左值
|
p | T* 类型指针
|
如果表达式 std::allocator_traits<A>::construct(m, p) 良构,那么 T
可默认插入 (DefaultInsertable) 到 X
中。
[编辑] 注解
默认情况下,这会值初始化对象,如同使用 ::new((void*)p) T()(C++20 前)std::construct_at(p)(C++20 起) 一样。
如果不想要值初始化,例如当对象是非类类型且不需要清零时,那么可通过提供定制的 Allocator::construct
避免。
尽管 C++23 前要求在构造 std::basic_string 的元素时使用定制的 construct
,所有实现都使用默认机制。P1072R10 更正了该要求以匹配既存实践。
[编辑] 缺陷报告
下列更改行为的缺陷报告追溯地应用于以前出版的 C++ 标准。
缺陷报告 | 应用于 | 出版时的行为 | 正确行为 |
---|---|---|---|
N3346 | C++11 | 可复制插入 (CopyInsertable) 和可移动插入 (MoveInsertable) 这两个要求已经存在,但还缺少可默认插入 (DefaultInsertable) |
添加该要求 |
[编辑] 参阅
可默认构造 (DefaultConstructible) | |
可复制插入 (CopyInsertable) | |
可移动插入 (MoveInsertable) | |
可就位构造 (EmplaceConstructible) | |
可擦除 (Erasable) |