struct S { char A; char B; char C; char D; };
unsigned char x[4] = { 0xDE, 0xAD, 0xBE, 0xEF };
auto y = (S*) x;
cout << y->A; // undefined behaviour
这里的第四行违反了strict aliasing,这意味着编译器可能决定对我发挥一些卑鄙的技巧。有没有办法在不调用未定义的行为的情况下实现类似的东西?
答案 0 :(得分:1)
reinterpret_cast
是未定义的行为。唯一合法的方法是memcpy
。一个足够聪明的编译器会将它优化为虚无,但你真的没有保证。