Joh*_*nck 12 c++ enums numeric-limits c++11 strongly-typed-enum
这里有一些代码可能会起作用:
#include <cassert>
#include <limits>
enum test { A = 1 };
int main()
{
int max = std::numeric_limits<test>::max();
assert(max > 0);
}
Run Code Online (Sandbox Code Playgroud)
但它在Linux上的GCC(4.6.2)和clang(2.9)都失败了:枚举类型的max()实际上是零!即使您使用C++ 11枚举类型说明符来明确说明您希望枚举具有哪种类型,这仍然是正确的.
为什么是这样?至于C++ 11的行为,它是否被明确要求?我在N2347中没有提到它,这是关于强类型枚举的论文.
Jam*_*lis 23
std::numeric_limits专门用于标准库"对于每种算术类型,包括浮点和整数,包括bool"(§18.3.2.1/ 2).
您的枚举test不是这些类型之一,因此使用主模板.其行为由§18.3.2.3/ 1指定:"默认numeric_limits<T>模板应具有所有成员,但带有0或false值."
如果你想知道基础类型的特征test,你可以使用underlying_type:
std::numeric_limits<std::underlying_type<test>::type>::max()
Run Code Online (Sandbox Code Playgroud)
或者,您可以专注numeric_limits于test并让它返回您想要的值.不过,这不是一个特别好的主意.
| 归档时间: |
|
| 查看次数: |
6060 次 |
| 最近记录: |