0
struct vec3{
vec3(){x=y=z=0.0f;};
float x,y,z;
};

vec3 array[10];
char buffer[100];
memcpy(buffer, array, sizeof(array));
memcpy(array, buffer, sizeof(array));

struct Vec3は Plain Old Datatype ( PODタイプ) ではありません。このコードは正しいですか、または C++2003 のメモリ レイアウトに関する保証はありますか?

4

1 に答える 1

3

C++03 ではありませんが、C++11 では問題ありません。

彼らはstandard-layoutと呼ばれる概念を導入しました。これは、POD が本来あるべき姿です。標準化については触れませんが、新しいカテゴリは、クラスが実際には新しい初期化方法を備えた単なる POD であるという認識です。レイアウトは同じなので、「標準レイアウト」という名前になっています。

そのため、以前は POD のみだったもののほとんど (すべて?) が、現在は標準レイアウトのみになっているので、問題ありません。

実際には、これは C++03 コンパイラで問題なく機能します。これは、何らかの方法で C++11 をサポートしていると見なすことができます。

于 2012-11-30T16:34:22.283 に答える