C++ 生成警告 : dereferencing type-punned pointer will break strict-aliasing rules

标签 c++ pointers casting

我的 cast 行代码中有此警告:

dereferencing type-punned pointer will break strict-aliasing rules [-Wstrict- aliasing]

unsigned char buffer[64];
...
unsigned int value = *(unsigned int*)buffer;

如何解决这个警告?

感谢您的帮助!

最佳答案

此代码的作用取决于平台的字节序、对齐规则、整数大小和其他因素。仅仅通过观察是无法知道它的作用的。但您可能想要这样的东西:

unsigned int value = buffer[0];
value = (value << 8) | buffer[1];
value = (value << 8) | buffer[2];
value = (value << 8) | buffer[3];

关于C++ 生成警告 : dereferencing type-punned pointer will break strict-aliasing rules,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/27634529/

相关文章:

检查正确的类型转换

php - 在 IF 条件下与 int 和 string 进行比较

c# - 在 C# 中将 int 转换为 System.Numerics.BigInteger/从 System.Numerics.BigInteger

c++ - 在小部件的多级层次结构中使用 QActions 的推荐方法是什么?

c++ - 奇怪的 C++ boolean 转换行为 (true!=true)

c++ - 不同的冒泡排序算法代码——有什么区别? C++

c++ - 与删除器共享指针

c++ - char(*)[20] 与 char(*Object::variable)[20] 有何不同?

c - 我的算法的奇怪行为

c - 将结构体指针传递给 C 中的函数