Tag: re prepret cast

再一次:严格的别名规则和char *

我读得越多,我就越困惑。 相关问题的最后一个问题与我的问题最接近,但是我对所有关于对象生命周期的问题感到困惑,尤其是 – 只读或不读。 直截了当。 如我错了请纠正我。 这很好,gcc没有发出警告,我正试图“通过char* ”读取类型T ( uint32_t ): uint32_t num = 0x01020304; char* buff = reinterpret_cast( &num ); 但这是“坏”(也是一个警告),我正在尝试“反过来”: char buff[ 4 ] = { 0x1, 0x2, 0x3, 0x4 }; uint32_t num = *reinterpret_cast( buff ); 第二个如何与第一个不同,特别是当我们谈论重新排序指令(用于优化)时? 另外,添加const不会以任何方式改变这种情况。 或者这只是一个直接规则,它明确指出:“这可以在一个方向完成,但在另一个方向不能完成”? 我在标准中找不到任何相关内容(特别是在C ++ 11标准中搜索过)。 C和C ++是否相同(因为我读了一条评论,暗示它与2种语言不同)? 我使用union来“解决”这个问题,这仍然看起来不是 100%正常,因为标准并不保证(这表明我只能依赖于最后在union修改的值)。 所以,经过大量阅读,我现在更加困惑。 我想只有memcpy才是“好”的解决方案? 相关问题: 什么是严格别名规则? “解除引用类型 – […]