相关疑难解决方法(0)

"解除引用类型惩罚指针将破坏严格别名规则"警告

我使用一个代码,我将枚举*转换为int*.像这样的东西:

enum foo { ... }
...
foo foobar;
int *pi = reinterpret_cast<int*>(&foobar);
Run Code Online (Sandbox Code Playgroud)

在编译代码(g ++ 4.1.2)时,我收到以下警告消息:

dereferencing type-punned pointer will break strict-aliasing rules
Run Code Online (Sandbox Code Playgroud)

我用Google搜索了这条消息,发现只有在严格的别名优化打开时才会发生这种情况.我有以下问题:

  • 如果我留下带有此警告的代码,它是否会生成可能错误的代码?
  • 有没有办法解决这个问题?
  • 如果没有,是否可以从源文件内部关闭严格别名(因为我不想为所有源文件关闭它,我不想为此源文件制作单独的Makefile规则)?

是的,我实际上需要这种别名.

c++ warnings strict-aliasing

53
推荐指数
4
解决办法
5万
查看次数

标签 统计

c++ ×1

strict-aliasing ×1

warnings ×1