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.