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++ 标准。
缺陷报告 | 应用于 | 发布时的行为 | 正确的行为 |
---|---|---|---|
N3346 | C++11 | 存在 CopyInsertable 和 MoveInsertable 的要求 但缺少 DefaultInsertable |
添加了该要求 |
[编辑] 参见
DefaultConstructible(可默认构造) | |
CopyInsertable(可复制插入) | |
MoveInsertable(可移动插入) | |
EmplaceConstructible(可就地构造) | |
Erasable(可擦除) |