命名空间
变体
操作

C++ 命名要求: DefaultInsertable (自 C++11 起)

来自 cppreference.cn
< cpp‎ | named req
 
 
C++ 命名要求
 

指定给定分配器可以就地默认构造此类型的对象。

目录

[编辑] 要求

给定以下类型、值和表达式

类型 定义
T 对象类型
A 分配器类型
X 满足以下所有条件的容器类型
定义
m 类型为 A 的左值
p 类型为 T* 的指针

如果表达式 std::allocator_traits<A>::construct(m, p) 形式良好,则 TDefaultInsertableX 中。

[编辑] 注释

默认情况下,这将值初始化对象,如同::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 要求 CopyInsertableMoveInsertable
存在,但缺少 DefaultInsertable
添加了要求

[编辑] 参见

DefaultConstructible
CopyInsertable
MoveInsertable
EmplaceConstructible
Erasable