C++ 命名要求: CopyInsertable (自 C++11 起)
來自 cppreference.com
指定給定分配器可以在原地複製構造型別物件。
[編輯] 要求
給定以下型別、值和表示式
型別 | 定義 |
T
|
一個物件型別 |
A
|
一個分配器型別 |
X
|
一個滿足以下所有條件的容器型別
|
值 | 定義 |
m | 一個型別為 A 的左值 |
p | 一個型別為 T* 的指標 |
表示式 | 定義 |
v | 表示型別 T / const T 的左值,或型別 const T 的右值的表示式 |
expr | std::allocator_traits<A>::construct(m, p, v) |
如果滿足所有以下條件,則 T
可 CopyInsertable 到 X
中:
-
T
可 MoveInsertable 到X
中。 - expr 形式良好。
- 評估 expr 不會改變 v 的值。
- 評估 expr 後,v 的值等同於 *p。
[編輯] 注意
如果 A
是 std::allocator<T>,則這將呼叫 placement new,如 ::new((void*)p) T(v)(直至 C++20)std::construct_at(p, v)(自 C++20 起)。
儘管要求在 C++23 之前構造 std::basic_string 的元素時使用定製的 construct
,但所有實現都只使用了預設機制。此要求已透過 P1072R10 糾正以符合現有實踐。
[編輯] 缺陷報告
下列更改行為的缺陷報告追溯地應用於以前出版的 C++ 標準。
缺陷報告 | 應用於 | 釋出時的行為 | 正確的行為 |
---|---|---|---|
LWG 2177 | C++11 | 評估 expr 沒有任何後置條件 | 已新增 |
LWG 3957 | C++11 | v 可以表示型別 T 的右值 |
已排除 |