【发布时间】:2013-02-08 12:59:11
【问题描述】:
下面的定义是否明确:
char* charPtr = new char[42];
int* intPtr = (int*)charPtr;
charPtr++;
intPtr = (int*) charPtr;
intPtr 未正确对齐(至少在两种情况中的一种情况下)。放在那里是违法的吗? UB 在任何阶段都在使用它吗?怎么用,怎么不能?
【问题讨论】:
-
如果您在此之后尝试使用
intPtr,则会发生未对齐的访问(在相关处理器上)。所以绝对不能接受。虽然它可能适用于某些处理器 - 例如x86 会很高兴地读取未对齐的内存,但速度会慢一些。 -
我认为你可以回退,但不能在施法后使用它:) 不过我必须检查一下。
-
“你能把它扔回去吗?”是什么意思
-
@JohnDibling 删除了该部分(发现需要回滚才能工作)。
-
在
C++中最好使用static_cast而不是C样式转换。
标签: c++ language-lawyer strict-aliasing