下面的代碼編譯失敗live on Ideone:初始化constexpr與常量:和不同的治療對於int雙
#include <iostream>
using namespace std;
int main() {
const double kPi = 3.14;
constexpr double kPi2 = 2.0*kPi;
cout << kPi2;
}
的錯誤信息是:
prog.cpp: In function 'int main()': prog.cpp:6:30: error: the value of 'kPi' is not usable in a constant expression constexpr double kPi2 = 2.0*kPi; ^ prog.cpp:5:15: note: 'kPi' was not declared 'constexpr' const double kPi = 3.14;
代入const
聲明kPi
與constexpr
,it compiles successfully。
在另一方面,當int
是用來代替double
,好像const
plays well與constexpr
:
#include <iostream>
using namespace std;
int main() {
const int k1 = 10;
constexpr int k2 = 2*k1;
cout << k2 << '\n';
return 0;
}
爲什麼int
和double
得到不同的治療方法用於初始化與const
一個constexpr
?
這是Ideone編譯器中的錯誤嗎?這是C++標準所要求的嗎?這是爲什麼?
上述代碼是否爲UB?
P.S.我嘗試使用Visual Studio 2015 C++編譯器,它編譯第一個代碼片段(初始化constexpr
與const
)就好了。
[問題1826:在常量表達式const的浮點](http://stackoverflow.com/a/30742473/1708801)介紹了爲什麼浮點被區別對待的一些歷史。另外[有趣的不贊成gcc exntension](http://stackoverflow.com/q/32813953/1708801)。 –
@ShafikYaghmour謝謝。我提高了這個帖子。 –
看起來像@ ShafikYaghmour的評論應該被提升爲答案,然後被接受。 – TriskalJM