J'ai essayé des expressions const qui sont évaluées au moment de la compilation. Mais j'ai joué avec un exemple qui semble incroyablement rapide lorsqu'il est exécuté au moment de la compilation.
#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;
}
Lorsque j'exécute ce code, l'exécution prend environ 7 secondes. Jusqu'ici tout va bien. Mais quand je change long int res = fib(45)
de const long int res = fib(45)
trajet ne dure pas même une seconde. À ma connaissance, il est évalué au moment de la compilation.
Mais la compilation prend environ 0,3 seconde
Comment le compilateur peut-il évaluer cela si rapidement, mais au moment de l'exécution, cela prend beaucoup plus de temps? J'utilise gcc 5.4.0.
fib
. La mise en œuvre des nombres de fibonacci que vous avez ci-dessus est assez lente. Essayez de mettre en cache les valeurs des fonctions dans le code d'exécution et cela sera beaucoup plus rapide.