Namespaces
Variants

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

From 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

関連項目

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