C++ 名前付き要件: TriviallyCopyable (C++11 以降)
From cppreference.com
注記: 標準では、この名前のついた要件は定義されていません。これはコア言語によって定義された型カテゴリです。一貫性のために、名前付き要件としてここに含められています。
目次 |
[編集] 要件
以下の型はまとめてトリビアルにコピー可能な型と呼ばれます
- スカラ型
- トリビアルにコピー可能なクラス型
- そのような型の配列
- これらの型のcv修飾版
[編集] 注記
一般に、任意のトリビアルにコピー可能な型 T と T のオブジェクト obj1 について、obj1 の基底バイトは char または unsigned char、または std::byte(C++17 以降) の配列、または T の異なるオブジェクト obj2 にコピーできます。obj1 と obj2 のいずれも、潜在的に重複するサブオブジェクトであってはなりません。
obj1 の基底バイトがこのような配列にコピーされ、その結果の内容が obj1 にコピーし直されると、obj1 は元の値を保持します。obj1 の基底バイトが obj2 にコピーされると、obj2 は obj1 の値を保持します。
基底バイトは、生きている volatile オブジェクトにアクセスしない限り、std::memcpy または std::memmove でコピーできます。
[編集] 欠陥報告
以下の動作変更を伴う欠陥報告が、以前に公開されたC++標準に遡って適用されました。
| DR | 適用対象 | 公開された動作 | 正しい動作 |
|---|---|---|---|
| CWG 1734 | C++11 | 削除された非トリビアルな代入を持つ C++03 POD はトリビアルではなかった | 削除されたコンストラクタ/演算子が許可された |
| CWG 2094 | C++11 | Volatile スカラー型はトリビアルにコピー可能ではない (CWG 1746) | トリビアルにコピー可能になった |
[編集] 関連項目
| (C++11) |
型がトリビアルにコピー可能であるかをチェックする (クラステンプレート) |