Namespaces
Variants

C++ named requirements: DefaultInsertable (since C++11)

From cppreference.net
C++ named requirements

指定该类型的对象可以通过给定的分配器进行原地默认构造。

目录

要求

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

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

如果表达式 std:: allocator_traits < A > :: construct ( m, p ) 格式正确,则 T 默认插入 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