【发布时间】:2017-09-21 15:02:50
【问题描述】:
这段代码:
enum : unsigned { foo = 4 };
enum : unsigned { bar = 32 };
int main() { return bar > foo; }
给我以下警告(使用 GCC 5.4.0):
$ g++ --std=c++11 -o a a.cpp
a.cpp: In function ‘int main()’:
a.cpp:4:27: warning: comparison between ‘enum<anonymous>’ and ‘enum<anonymous>’ [-Wenum-compare]
int main() { return bar > foo; }
^
这是为什么呢?我已经明确指定了这些枚举值的类型,比较它们没有任何不确定性。我什至对两个枚举都使用了相同的类型(没关系)。那么这里的交易是什么?
请注意,clang (3.8.0) 不会产生此警告,即使使用 -Wall。
【问题讨论】:
-
您将苹果与橙子进行比较。您可以关闭或忽略警告。很难想象在哪些情况下这是合法的,但如果您知道这是明智的,那么您可以将一侧转换为另一侧的类型或将两侧转换为通用类型。如果它是可衡量的,为什么要使用
enum而不是unsigned?如果它不可测量,为什么要比较它?为什么要比较不同的不可测量单位? -
@DavidSchwartz:实际上,imagine 并没有那么难。
标签: gcc enums clang compiler-warnings underlyingtype