C++final非虚拟类是否被重新解释为数组安全使用?
-
22-12-2019 - |
题
我有一个只声明相同类型字段的非虚拟final类。
struct Vector3 final
{
float X, Y, Z;
Vector3(float x, float y, float z) : X(x), Y(y), Z(z)
{
}
float Sum()
{
return X + Y + Z;
}
};
将此类实例的指针重新解释为浮动数组是否安全?
int main(int argc, const char *argv[])
{
Vector3 v(10, 20, 30);
Vector3 *pV = &v;
float *ff = reinterpret_cast<float*>(pV);
std::cout << ff[0] << std::endl << ff[1] << std::endl << ff[2] << std::endl;
char c;
std::cin >> c;
return 0;
}
其他提示
否,它不是 - 数据成员之间可能会有填充。
一般来说,在便携式C ++中,否;因为系统(编译器,运行时等)可以自由地订购和空间struct / class成员。例如,将成员对齐CPU字边界。
如果控制用于构建项目的编译器,您可以使用侥幸脱离它。如果您使用的是VC,您需要使用#pragma pack
: http:// msdn.microsoft.com / en-US / Library / 2E70t5Y1.aspx
不隶属于 StackOverflow