이 live on Ideone 컴파일 :는 const를 통한 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
로 사용되는 한편
constexpr
와
const
plays well처럼 보인다 :
#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. Visual Studio 2015 C++ 컴파일러를 사용해 보았습니다. (constexpr
을 const
으로 초기화하는) 첫 번째 코드 단편을 정상적으로 컴파일합니다.
[문제 1826 : 상수 식에 const를 부동 소수점 (http://stackoverflow.com을/a/30742473/1708801)에서는 부동 소수점을 다르게 처리하는 이유에 대해 몇 가지 역사를 다룹니다. 또한 [흥미로운 지원되지 않는 gcc exntension] (http://stackoverflow.com/q/32813953/1708801). –
@ShafikYaghmour 감사합니다. 나는 그 지위를 upvoted. –
@ ShafikYaghmour 님의 댓글은 답장으로 승격되어 받아 들여 져야합니다. – TriskalJM