我想在类中定义一个常量,该值是最大可能的int.像这样的东西:
class A
{
...
static const int ERROR_VALUE = std::numeric_limits<int>::max();
...
}
Run Code Online (Sandbox Code Playgroud)
此声明无法使用以下消息进行编译:
numeric.cpp:8:错误:"的std :: numeric_limits :: MAX()"不能出现在一个常数表达式numeric.cpp:8:错误:一个函数调用不能出现在一个常数表达式
我理解为什么这不起作用,但有两件事对我来说很奇怪:
在我看来,在常量表达式中使用该值是一个自然的决定.为什么语言设计者决定使max()成为一个函数,从而不允许这种用法?
该规范在18.2.1中声称
对于在numeric_limits模板中声明为static const的所有成员,特化应以这样的方式定义这些值,使它们可用作整型常量表达式.
这不是说我应该能够在我的场景中使用它而不是它与错误信息相矛盾吗?
谢谢.
在C++标准库中,该值std::numeric_limits<T>::max()被指定为函数.特定类型的其他属性以常量(如std::numeric_limits<T>::is_signed)给出.所有类型的常量都是T作为函数给出的,而所有其他常量都是以常量值的形式给出的.
这背后的理由是什么?