2012-11-30 38 views
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)); 

結構VEC3不是普通的老式數據類型(POD 類型)。 這段代碼是否正確和/或是否存在一些關於C++ 2003中內存佈局的保證?佈局不-POD類型(因爲有默認的構造函數)

+0

當然,你應該使用'sizeof(array)'來代替'100'。 – GManNickG

回答

3

不在C++ 03中,但在C++ 11中,這很好。

他們引入了一個名爲的標準佈局,這實際上就是POD本來應該做的。我不會進入標準,但新的範疇是認識到你的班級實際上只是一種用初始化它的新方法的POD;佈局仍然相同,因此稱爲「標準佈局」。

因此,以前只有POD的大多數(全部?)現在都是標準佈局,所以你很好走。

實際上,這在C++ 03編譯器中工作正常;您可以將它視爲支持C++ 11的某種方式。

相關問題