ビット単位のコピーを使用できるかどうかは、structまたはタグとは関係がなく、言われたかclassどうかにのみ依存します。それらが標準(9/6 [class])で定義されているかどうかは、基本的に、コンストラクター以外の特別なメンバーメソッドを宣言する必要がないということです。structclass is_trivially_copiable
その後、ビット単位のコピーは3.9 /2[basic.types]の標準で許可されます。
自明にコピー可能な型のオブジェクト(基本クラスのサブオブジェクトを除く)のT場合、オブジェクトが型の有効な値を保持しているかどうかに関係なく、オブジェクトをT構成する基になるバイト(1.7)をまたはの配列にコピーできcharますunsigned char。charまたはの配列の内容がunsigned charオブジェクトにコピーバックされた場合、オブジェクトはその後元の値を保持する必要があります。[例:
#define N sizeof(T)
char buf[N];
T obj; // obj initialized to its original value
std::memcpy(buf, &obj, N); // between these two calls to std::memcpy,
// `obj` might be modified
std::memcpy(&obj, buf, N); // at this point, each subobject of `obj`
// of scalar type holds its original value
—例を終了]
注:パディングバイトのビット単位のコピーは、Valgrindのレポートにつながります。
std::copy同じ効果に使用する:
char const* b = reinterpret_cast<char const*>(&obj);
std::copy(b, b + N, buf);