禁用MSVC警告C4482是否安全?

Is it safe to disable MSVC warning C4482?

本文关键字:安全 是否 C4482 MSVC 警告 禁用      更新时间:2023-10-16

虽然用枚举的名称限定枚举值是无效的c++ 03,但据我所知,它是有效的c++ 11。尽管如此,MSVC 10还是会为以下内容生成警告C4482:

enum E { A, B };
int i = E::A;  // warning C4482 (but valid C++11?)

由于我们的大部分代码使用了c++ 11的特性(尤其是lambdas),因此禁用此警告似乎是安全的。我是对的,代码是有效的c++ 11?

注意:问题中的代码不是我写的,我不希望每出现一次都修改一次。

编辑:添加相关链接

  • MSDN页面的警告。
  • 另一个关于警告的问题。问题和答案似乎都参考了c++ 03。

由于我们的大部分代码使用了c++ 11的特性(尤其是lambdas),因此禁用此警告似乎是安全的。

如果你已经在依赖c++ 11的特性,那么可以。c++ 11允许使用由枚举名称限定范围的常规枚举。微软把它作为一个扩展已经有一段时间了,所以他们发布了一个关于非标准行为的警告。

所以你可以禁用它。

请注意,像VC2010这样的旧编译器,而不是警告,确实会引发编译错误C2653(带有消息"…