C++ 命名要求: TriviallyCopyable (自 C++11 起)
來自 cppreference.com
注意:標準沒有定義以此名稱命名的需求。這是一個由核心語言定義的型別類別。此處將其作為命名需求包含在內,僅為保持一致性。
目錄 |
[編輯] 要求
以下型別統稱為 可平凡複製型別
[編輯] 注意
通常,對於任何可平凡複製型別 T
和 T
型別物件 obj1
,obj1
的底層位元組可以被複制到一個 char 或 unsigned char 陣列中,或者 std::byte(自 C++17 起),或者複製到 obj2
(一個與 obj1
不同的 T
型別物件)中。obj1
和 obj2
都不能是潛在重疊的子物件。
如果 obj1
的底層位元組被複制到這樣的陣列中,然後將結果內容複製回 obj1
中,obj1
將保留其原始值。如果 obj1
的底層位元組被複制到 obj2
中,obj2
將持有 obj1
的值。
只要沒有訪問存活的 volatile 物件,底層位元組可以透過 std::memcpy 或 std::memmove 進行復制。
[編輯] 缺陷報告
下列更改行為的缺陷報告追溯地應用於以前出版的 C++ 標準。
缺陷報告 | 應用於 | 釋出時的行為 | 正確的行為 |
---|---|---|---|
CWG 1734 | C++11 | C++03 POD 帶已刪除的非平凡賦值運算子不再是平凡的 | 允許已刪除的建構函式/運算子 |
CWG 2094 | C++11 | Volatile 標量型別不是可平凡複製的 (CWG 1746) | 被設為可平凡複製 |
[編輯] 參閱
(C++11) |
檢查型別是否為可平凡複製型別 (類模板) |