我想在一个类中定义一个常量,它的值是最大可能的 int。像这样的东西:
class A
{
...
static const int ERROR_VALUE = std::numeric_limits<int>::max();
...
}
此声明无法编译并显示以下消息:
numeric.cpp:8:错误:'std::numeric_limits::max()' 不能出现在常量表达式中 numeric.cpp:8:错误:函数调用不能出现在常量表达式中
我明白为什么这不起作用,但有两件事对我来说很奇怪:
在我看来,在常量表达式中使用值是一个自然的决定。为什么语言设计者决定让max()成为一个函数,从而不允许这种用法?
该规范在 18.2.1 中声称
对于在 numeric_limits 模板中声明为 static const 的所有成员,特化应以可用作整数常量表达式的方式定义这些值。
这是否意味着我应该能够在我的场景中使用它并且它不与错误消息相矛盾?
谢谢你。