繁体   English   中英

如何在C ++中将const int设置为maximum?

[英]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中,您可以构建常量表达式的常量操作集非常紧凑。 只有裸积分和数学运算。

要在常量表达式中使用用户定义的函数,您需要:

  • C ++ 11或更高版本
  • 表示要标记为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.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM