C++ named requirements: DefaultInsertable (since C++11)
|
|
|
||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
指定该类型的对象可以通过给定的分配器进行原地默认构造。
目录 |
要求
给定以下类型、值和表达式:
| 类型 | 定义 |
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 |