C++ 命名要求: DefaultInsertable (自 C++11 起)
来自 cppreference.cn
指定给定分配器可以就地默认构造此类型的对象。
目录 |
[编辑] 要求
给定以下类型、值和表达式
类型 | 定义 |
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++ 标准。
DR | 应用于 | 已发布行为 | 正确行为 |
---|---|---|---|
N3346 | C++11 | 要求 CopyInsertable 和 MoveInsertable 存在,但缺少 DefaultInsertable |
添加了要求 |
[编辑] 参见
DefaultConstructible | |
CopyInsertable | |
MoveInsertable | |
EmplaceConstructible | |
Erasable |