C++中的const double表达式

Gre*_*g82 2 c++ const constexpr

C++ 11英文维基百科页面中,我们可以读到:

在C++ 11之前,仅当变量声明为const,初始化程序是常量表达式并且是整数或枚举类型时,变量的值才能用于常量表达式.如果使用constexpr关键字定义变量,则 C++ 11 将删除变量必须为整数或枚举类型的限制:

 constexpr double earth_gravitational_acceleration = 9.8;
 constexpr double moon_gravitational_acceleration = earth_gravitational_acceleration / 6.0;
Run Code Online (Sandbox Code Playgroud)

这是什么意思?特别是,它是否意味着:

const double earth_gravitational_acceleration = 9.8;
const double moon_gravitational_acceleration = earth_gravitational_acceleration / 6.0;
Run Code Online (Sandbox Code Playgroud)

在C++ 11之前的C++中是非法的?G ++与此完全OK,即使有-ansi,-pedantic等...

谢谢!

Mar*_*k B 5

你的第二个例子完全不违法.它不是编译时常量.可能在运行时计算这些值.