[英]How to set a const int to maximum in C++?
我有一个静态const成员,并希望将其设置为最大整数。 我正在尝试以下方法:
const static int MY_VALUE = std::numeric_limits<int>::max();
但是得到以下错误:
错误:静态数据成员的类内初始化程序不是常量表达式
这有什么解决方案吗? 函数如何不返回常量表达式?
编辑:添加-std = c ++ 11修复了该问题。 我的室友告诉我,编译器(前C ++ 11)不够聪明,不能确定std :: numeric_limits :: max()不会改变任何其他东西,因此不被认为是常量。 这可能是造成这个错误的原因吗?
必须从常量表达式(在编译时可评估的表达式)初始化常量。
在C ++ 03中,您可以构建常量表达式的常量操作集非常紧凑。 只有裸积分和数学运算。
要在常量表达式中使用用户定义的函数,您需要:
constexpr
功能 这就是为-std=c++11
标志添加到Clang的原因:它允许constexpr
并“切换”到改进的标准库实现,它使用constexpr
for std::numeric_limits<T>::max()
。
注意:如果您使用更新版本的Clang,则C ++ 11将是默认值,并且不需要任何标志来允许constexpr
。
像这样:
#include <climits>
const static int MY_VALUE = INT_MAX;
如果静态数据成员是const integer或const枚举类型,则它在类定义中的声明可以指定一个常量初始化器,它应该是一个整型常量表达式(5.19)。 在这种情况下,成员可以出现在整数常量表达式中。
如果在程序中使用该成员,并且名称空间作用域定义不包含初始化程序,则该成员仍应在名称空间作用域中定义。
numeric_limits
max()
不是一个整数常量,即编译时常量。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.