C++ 命名要求: DefaultInsertable (自 C++11 起)
來自 cppreference.com
指定給定分配器可以在原地預設構造該型別的物件。
目錄 |
[編輯] 要求
給定以下型別、值和表示式
型別 | 定義 |
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(可擦除) |