2012-11-30 39 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的某种方式。

相关问题