【发布时间】:2017-04-15 02:01:01
【问题描述】:
考虑这段代码:
typedef enum Type1
{
val11,
val12
} Type1;
typedef enum Type2
{
val21,
val22
} Type2;
Type1 type1 = val11;
if ( type1 == val22 )
std::cout << "foo";
Visual Studio 2015 不会发出任何警告(即使使用 /Wall)。但是type1 和val22 不是同一类型。这是正常的还是 Visual Studio 的错误?
【问题讨论】:
-
如果像 c# 这样的枚举只是由整数支持,所以如果在 c++ 中成立,它可能等同于
if (type1 == 1) -
这很正常。等式运算符的两边都转换为
int。 -
编写现代 C++ 代码,使用
enum class。 -
这里typedef是没用的,除非枚举定义也是用C编译的。
-
@HansPassant:这会触发编译警告/错误吗?您能否通过示例将其发布为答案?
标签: c++ visual-studio enums warnings