在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;
这是什么意思?特别是,它是否意味着:
const double earth_gravitational_acceleration = 9.8; const double moon_gravitational_acceleration = earth_gravitational_acceleration / 6.0;
在C++ 11之前的C++中是非法的?G ++与此完全OK,即使有-ansi
,-pedantic
等...
谢谢!
你的第二个例子完全不违法.它不是编译时常量.可能在运行时计算这些值.