我使用了一个代码,将 enum* 转换为 int*。像这样的东西:
enum foo { ... }
...
foo foobar;
int *pi = reinterpret_cast<int*>(&foobar);
编译代码(g++ 4.1.2)时,我收到以下警告消息:
dereferencing type-punned pointer will break strict-aliasing rules
我用谷歌搜索了这条消息,发现只有在启用严格别名优化时才会发生这种情况。我有以下问题:
- 如果我留下这个警告的代码,它会产生潜在的错误代码吗?
- 有没有办法解决这个问题?
- 如果没有,是否可以从源文件内部关闭严格别名(因为我不想为所有源文件关闭它,也不想为此源文件制定单独的 Makefile 规则)?
是的,我实际上需要这种别名。