Fir*_*his 29 c++ std numeric-limits constexpr
我想在类中定义一个常量,该值是最大可能的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的所有成员,特化应以这样的方式定义这些值,使它们可用作整型常量表达式.
这不是说我应该能够在我的场景中使用它而不是它与错误信息相矛盾吗?
谢谢.
Geo*_*che 16
虽然目前的标准缺乏支持,但对于整数类型,Boost.IntegerTraits为您提供了编译时常量const_min
和const_max
.
问题来自§9.4.2/ 4:
如果静态数据成员是const integer或const枚举类型,则它在类定义中的声明可以指定一个常量初始化器,它应该是一个整型常量表达式(5.19).在这种情况下,成员可以出现在整数常量表达式中.
请注意,它添加:
如果在程序中使用该成员,并且名称空间作用域定义不包含初始化程序,则该成员仍应在名称空间作用域中定义.
正如其他人已经提到numeric_limit
的那样,min()
并且max()
它们不是整数常量表达式,即编译时间常数.
小智 14
你要:
#include <limits>
struct A {
static const int ERROR_VALUE;
};
const int A::ERROR_VALUE = std::numeric_limits<int>::max();
Run Code Online (Sandbox Code Playgroud)
将类/结构放在标题中,将定义放在.cpp文件中.
归档时间: |
|
查看次数: |
9482 次 |
最近记录: |