【发布时间】:2012-03-01 09:25:19
【问题描述】:
这里有一些看起来可以工作的代码:
#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 的行为,是否有明确要求?我在关于强类型枚举的论文 N2347 中没有提到它。
【问题讨论】:
-
你期望的值是多少?
-
is_specialized 的结果是什么?
-
@JamesMcNellis:我假设他希望它与 numeric_limits
::max. 相同 -
@RaptorFactor:不过,这不是
test对象可表示的最大值。test对象可表示的最大值为1。 -
@JohnZwinck:您可以查看
is_specialized。如果不是这样,那么所有值都应该被认为是无意义的。
标签: c++ enums c++11 numeric-limits strongly-typed-enum