我想在一个类内部定义一个常量,其值为最大可能的整数。就像这样:
class A
{
...
static const int ERROR_VALUE = std::numeric_limits<int>::max();
...
}
这个声明无法通过编译,错误信息如下:
numeric.cpp:8: error: 'std::numeric_limits::max()' cannot appear in a constant-expression numeric.cpp:8: error: a function call cannot appear in a constant-expression
我理解为什么会出现这种情况,但有两点看起来很奇怪:
在常量表达式中使用该值对我来说似乎是一个自然的决定。为什么语言设计者决定将 max() 设计为函数而不允许这种用法?
规范在18.2.1中声称:
对于在numeric_limits模板中声明为static const的所有成员,特化应以可用作整数常量表达式的方式定义这些值。
这难道不意味着我应该能够在我的场景中使用它吗?这是否与错误消息相矛盾?
谢谢。
climits
与模板不兼容。 - UncleBensinteger_traits <>::const_max/const_min
。 - Anycorn