컴파일 타임에 평가되는 const 표현식을 시험해 보았습니다. 그러나 컴파일 타임에 실행될 때 엄청나게 빠른 예를 들었습니다.
#include<iostream>
constexpr long int fib(int n) {
return (n <= 1)? n : fib(n-1) + fib(n-2);
}
int main () {
long int res = fib(45);
std::cout << res;
return 0;
}
이 코드를 실행하면 실행하는 데 약 7 초가 걸립니다. 여태까지는 그런대로 잘됐다. 내가 변경할 때 long int res = fib(45)
까지 const long int res = fib(45)
그것은 심지어 두 번째를하지합니다. 내 이해로는 컴파일 타임에 평가됩니다.
그러나 컴파일에는 약 0.3 초가 걸립니다.
컴파일러는 이것을 어떻게 그렇게 빨리 평가할 수 있지만 런타임에 훨씬 더 많은 시간이 걸립니까? gcc 5.4.0을 사용하고 있습니다.
fib
. 위의 피보나치 수의 구현은 너무 느립니다. 런타임 코드에서 함수 값을 캐싱하면 훨씬 빠릅니다.