gpt4 book ai didi

c++ - 为什么 C++ numeric_limits::max() == 0?

转载 作者:IT老高 更新时间:2023-10-28 23:10:38 25 4
gpt4 key购买 nike

这里有一些看起来可以工作的代码:

#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 中没有提到它。

最佳答案

std::numeric_limits 专门用于标准库“针对每种算术类型,包括浮点和整数,包括 bool”(第 18.3.2.1/2 节) .

您的枚举 test 不是这些类型之一,因此使用主模板。其行为由 §18.3.2.3/1 指定:“默认 numeric_limits 模板应具有所有成员,但具有 0false 值(value)观。”

如果想知道test的底层类型的traits,可以使用underlying_type:

std::numeric_limits<std::underlying_type<test>::type>::max()

或者,您可以将 numeric_limits 专门用于 test 并让它返回您想要的值。不过,这并不是一个特别好的主意。

关于c++ - 为什么 C++ numeric_limits<enum_type>::max() == 0?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/9201865/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com