以下是一段看起来似乎能够工作的代码:
#include <cassert>
#include <limits>
enum test { A = 1 };
int main()
{
int max = std::numeric_limits<test>::max();
assert(max > 0);
}
但是在Linux上,无论是使用GCC(4.6.2)还是clang(2.9),它都会失败:枚举类型的max()实际上为零!即使您使用C++11枚举类型限定符明确指定要使用的枚举类型,这种情况仍然如此。
为什么会这样?至于C++11的行为,是否有明确的调用?我在Strongly Typed Enums的N2347文件中找不到任何提及。
1
。 - James McNellisis_specialized
。如果不是真的,则应将所有值视为无意义。 - David Stone1
,因为您可以前向声明您的enum
。在使用std::numeric_limits
时,编译器可能不知道枚举的任何值。 - David Stone