名前空間
変種
操作

C++ 名前付き要件: TriviallyCopyable (C++11 以降)

From cppreference.com
 
 
C++ 名前付き要件
 

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

目次

[編集] 要件

以下の型はまとめてトリビアルにコピー可能な型と呼ばれます

[編集] 注記

一般に、任意のトリビアルにコピー可能な型 TT のオブジェクト obj1 について、obj1 の基底バイトは char または unsigned char、または std::byte(C++17 以降) の配列、または T の異なるオブジェクト obj2 にコピーできます。obj1obj2 のいずれも、潜在的に重複するサブオブジェクトであってはなりません。

obj1 の基底バイトがこのような配列にコピーされ、その結果の内容が obj1 にコピーし直されると、obj1 は元の値を保持します。obj1 の基底バイトが obj2 にコピーされると、obj2obj1 の値を保持します。

基底バイトは、生きている volatile オブジェクトにアクセスしない限り、std::memcpy または std::memmove でコピーできます。

[編集] 欠陥報告

以下の動作変更を伴う欠陥報告が、以前に公開されたC++標準に遡って適用されました。

DR 適用対象 公開された動作 正しい動作
CWG 1734 C++11 削除された非トリビアルな代入を持つ C++03 POD はトリビアルではなかった 削除されたコンストラクタ/演算子が許可された
CWG 2094 C++11 Volatile スカラー型はトリビアルにコピー可能ではない (CWG 1746) トリビアルにコピー可能になった

[編集] 関連項目

型がトリビアルにコピー可能であるかをチェックする
(クラステンプレート) [編集]
English 日本語 中文(简体) 中文(繁體)