以下定义之间有区别吗?
const double PI = 3.141592653589793;
constexpr double PI = 3.141592653589793;
Run Code Online (Sandbox Code Playgroud)
如果没有,在C++ 11中首选哪种风格?
我想知道为什么整数ii在编译时初始化,但不是浮点数ff:
int main() {
const int i = 1;
constexpr int ii = i;
const float f = 1.0;
constexpr float ff = f;
}
Run Code Online (Sandbox Code Playgroud)
这是我尝试编译时会发生的事情:
> g++ -std=c++11 test.cc
test.cc: In function ‘int main()’:
test.cc:6:24: error: the value of ‘f’ is not usable in a constant expression
constexpr float ff = f;
^
test.cc:5:15: note: ‘f’ was not declared ‘constexpr’
const float f = 1.0;
Run Code Online (Sandbox Code Playgroud) 看下面的代码:
#include <iostream>
int main(void) {
int number1 = 4;
double salary[number1];
return 0;
}
Run Code Online (Sandbox Code Playgroud)
虽然可以成功编译,但应该认为是错误的,因为 number1 是非 const 变量。
#include <iostream>
int main(void) {
int number1 = 4;
const unsigned number2 = number1;
double salary[number2];
return 0;
}
Run Code Online (Sandbox Code Playgroud)
现在 number2 是一个常量变量。
也编译成功。
我觉得这是错误的,或者至少不是好的做法。
但我无法解释为什么。
有人可以解释为什么它是错误的吗?