Namespaces
Variants

C++ named requirements: TriviallyCopyable (since C++11)

From ja.cppreference.net
C++ named requirements

注: 標準規格はこの名称の名前付き要件を定義していません。これはコア言語によって定義される型カテゴリです。一貫性を保つためだけに、名前付き要件としてここに含まれています。

目次

要件

以下の型は総称して trivially copyable types と呼ばれます:

注記

一般的に、トリビアルコピー可能な型 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

関連項目

型がトリビアルコピー可能かどうかをチェックする
(クラステンプレート)