C++ named requirements: TriviallyCopyable (since C++11)
|
|
|
||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
注: 標準規格はこの名称の名前付き要件を定義していません。これはコア言語によって定義される型カテゴリです。一貫性を保つためだけに、名前付き要件としてここに含まれています。
目次 |
要件
以下の型は総称して trivially copyable types と呼ばれます:
- スカラ型
- トリビアルコピー可能なクラス型
- これらの型の配列
- これらの型のCV修飾版
注記
一般的に、トリビアルコピー可能な型
T
と
T
のオブジェクト
obj1
について、
obj1
の基底となるバイトは
char
または
unsigned
char
、あるいは
std::byte
(C++17以降)
の配列へ、または
T
の別個のオブジェクトである
obj2
へコピーすることができます。
obj1
と
obj2
はどちらも潜在的にオーバーラップする部分オブジェクトであってはなりません。
obj1
の基礎となるバイトがそのような配列にコピーされ、その後、結果の内容が
obj1
にコピーバックされた場合、
obj1
は元の値を保持します。
obj1
の基礎となるバイトが
obj2
にコピーされた場合、
obj2
は
obj1
の値を保持します。
基礎となるバイトは、 std::memcpy または std::memmove によってコピーできますが、生存中のvolatileオブジェクトにアクセスしない限り可能です。
不具合報告
以下の動作変更の欠陥報告書は、以前に公開されたC++規格に対して遡及的に適用されました。
| DR | 適用対象 | 公開時の動作 | 正しい動作 |
|---|---|---|---|
| CWG 1734 | C++11 | C++03 POD with deleted non-trivial assignment was not trivial | deleted ctors/operators allowed |
| CWG 2094 | C++11 | Volatile scalar types are not trivially copyable ( CWG 1746 ) | made trivially copyable |
関連項目
|
(C++11)
|
型がトリビアルコピー可能かどうかをチェックする
(クラステンプレート) |