【发布时间】:2011-02-13 20:53:46
【问题描述】:
我想在一个类中定义一个常量,它的值是最大可能的 int。像这样的:
class A
{
...
static const int ERROR_VALUE = std::numeric_limits<int>::max();
...
}
此声明无法编译并显示以下消息:
numeric.cpp:8: error: 'std::numeric_limits::max()' 不能出现在常量表达式中 numeric.cpp:8:错误:函数调用不能出现在常量表达式中
我明白为什么这不起作用,但有两件事在我看来很奇怪:
在我看来,在常量表达式中使用值是很自然的决定。为什么语言设计者决定将 max() 设为一个函数,从而不允许这种用法?
-
规范在 18.2.1 中声称
对于在 numeric_limits 模板中声明为 static const 的所有成员,特化应以可用作整数常量表达式的方式定义这些值。
这不是意味着我应该能够在我的场景中使用它并且它不与错误消息相矛盾吗?
谢谢。
【问题讨论】:
-
你可以使用 climits cplusplus.com/reference/clibrary/climits
-
@aaa:但是
climits不能很好地处理模板。 -
@Uncle 很不幸。原则上可以将定义包装在模板中,有些工作但可行。或提升 integer_traits 我认为已经提供了它们:
integer_traits <>::const_max/const_min
标签: c++ std constexpr numeric-limits