Ich habe const-Ausdrücke ausprobiert, die zur Kompilierungszeit ausgewertet werden. Aber ich habe mit einem Beispiel gespielt, das unglaublich schnell erscheint, wenn es zur Kompilierungszeit ausgeführt wird.
#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;
}
Wenn ich diesen Code ausführe, dauert die Ausführung ca. 7 Sekunden. So weit, ist es gut. Aber wenn ich dazu wechsle long int res = fib(45)
, const long int res = fib(45)
dauert es nicht einmal eine Sekunde. Nach meinem Verständnis wird es zur Kompilierungszeit ausgewertet.
Die Kompilierung dauert jedoch ca. 0,3 Sekunden
Wie kann der Compiler dies so schnell auswerten, aber zur Laufzeit dauert es so viel länger? Ich benutze gcc 5.4.0.
fib
. Die Implementierung der Fibonacci-Zahlen, die Sie oben haben, ist vorab ziemlich langsam. Versuchen Sie, die Funktionswerte im Laufzeitcode zwischenzuspeichern, und dies wird viel schneller.