コンパイル時に評価される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)
それに変更するとき、それは1秒もかかりません。私の理解では、コンパイル時に評価されます。
しかし、コンパイルには約0.3秒かかります
コンパイラーはこれをどのように迅速に評価できますか?しかし、実行時はそれよりはるかに時間がかかりますか?私はgcc 5.4.0を使用しています。
fib
。上記のフィボナッチ数の実装は、かなり遅いです。ランタイムコードで関数値をキャッシュしてみてください。