相关疑难解决方法(0)

我应该担心指针投射过程中的对齐吗?

在我的项目中,我们有一段这样的代码:

// raw data consists of 4 ints
unsigned char data[16];
int i1, i2, i3, i4;
i1 = *((int*)data);
i2 = *((int*)(data + 4));
i3 = *((int*)(data + 8));
i4 = *((int*)(data + 12));
Run Code Online (Sandbox Code Playgroud)

我和我的技术负责人谈到这个代码可能不便携,因为它试图将a unsigned char*转换为int*通常具有更严格的对齐要求的代码.但是技术主管说没关系,大多数编译器在转换后仍保持相同的指针值,我可以像这样编写代码.

坦率地说,我并不是真的相信.经过研究,我发现有些人反对使用上面的指针铸件,例如,这里这里.

所以这是我的问题:

  1. 在真实项目中投射后取消引用指针真的很安全吗?
  2. C型铸造和reinterpret_cast?之间有什么区别吗?
  3. C和C++之间有什么区别吗?

c c++ casting alignment

51
推荐指数
4
解决办法
1万
查看次数

标签 统计

alignment ×1

c ×1

c++ ×1

casting ×1