C++ 如何在C++;?

C++ 如何在C++;?,c++,integer,max,constants,numeric-limits,C++,Integer,Max,Constants,Numeric Limits,我有一个静态常量成员,希望将其设置为最大整数。我正在尝试以下方法: const static int MY_VALUE = std::numeric_limits<int>::max(); const static int MY_VALUE=std::numeric_limits::max(); 但会出现以下错误: 错误:静态数据成员的类内初始值设定项不是常量 表情 有什么解决办法吗?函数怎么能不返回常量表达式呢 编辑:添加-std=c++11修复了该问题。我的室友告诉我,编译器

我有一个静态常量成员,希望将其设置为最大整数。我正在尝试以下方法:

const static int MY_VALUE = std::numeric_limits<int>::max();
const static int MY_VALUE=std::numeric_limits::max();
但会出现以下错误:

错误:静态数据成员的类内初始值设定项不是常量 表情

有什么解决办法吗?函数怎么能不返回常量表达式呢

编辑:添加-std=c++11修复了该问题。我的室友告诉我,编译器(C++11之前版本)不够聪明,无法确定std::numeric_limits::max()不会对其他任何内容进行变异,因此不被视为常量。这可能就是这个错误的原因吗

如果静态数据成员是常量整数或常量枚举 类型,则其在类定义中的声明可以指定 常数初始值设定项,应为积分常数表达式 (5.19). 在这种情况下,成员可以出现在积分常量中 表情

如果在程序中使用该成员,则该成员仍应在名称空间范围中定义,并且名称空间范围定义不应包含初始值设定项


numeric\u limits
max()
不是整型常量,这是编译时常量。

必须从常量表达式(可在编译时计算的表达式)初始化常量

在C++03中,可以从中构建常量表达式的常量操作集非常紧凑。只有裸积分和数学运算

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

  • C++11或更高版本
  • 所述要标记的函数
    constexpr
这就是为什么将
-std=c++11
标志添加到Clang帮助:它允许
constepr
并“切换”到改进的标准库实现,该实现使用
constepr
作为
std::numeric\u limits::max()

注意:如果您使用的是较新版本的Clang,C++11将是默认版本,并且不需要使用任何标志来允许如下操作:

#include <climits>
const static int MY_VALUE = INT_MAX;
#包括
const static int MY_VALUE=int_MAX;

<代码>什么编译器(或者更重要的是C++标题),有哪些选项?在使用std=c++11的情况下对我有效。我目前使用的是使用
-std=c+11
编译的clang-700.1.81。顺便说一句,
MY_VALUE
对于不是宏的东西来说是个坏名字。在C++中使用常数的概念是很有意义的(在这里使用宏来表示常量),在java中(没有宏),但是C++中只会引起麻烦。@ CythChrkl MyObjor只是C++中11个问题的占位符。现在是常量。@BoPersson,这意味着它们可以用作编译时常量。。。我懂了