Problème utilisation de constexpr

Le problème exposé dans ce sujet a été résolu.

Bonsoir à tous,
Mon problème est que mon code fonctionne alors que selon moi il ne devrait pas . D'après ce que je sais constexpr permet d'évaluer la valeur d'une variable ou d'une fonction au moment de la compilation alors et pourtant lorsque je l'évalue au moment de l’exécution ça fonctionne.

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
constexpr int test(int a)
{
 return a;
}

int main()
{
  int a;
  cin>>a; 
  cout<<test(a)<<'\n'; //Pourquoi ça fonctionne ?
  return 0;
}

Je vous remercie d'avance de votre aide ,bonne soirée .

Pour compléter Davidbrcz, constexpr indique pour une fonction que le compilateur peut évaluer le résultat à la compilation à condition que les paramètres soient connu à la compilation, ce qui n'est pas le cas dans ton code.

En revanche, pour une variable, constexpr indique qu'elle doit être évalué à la compilation. Donc si tu veux t'assurer que l'exécution d'une fonction constexpr est faite à la compilation, il te suffit de stocker le résultat dans une variable constexpr.

Au passage, les exigences d'une fonction constexpr sont plus forte que le simple fait que le compilateur puisse évaluer le résultat à la compilation. En C++11, tu n'as droit d'utiliser en gros que return avec potentiellement de la récursion et des conditions ternaires. En C++14, tu es plus libre puisque tu as droit en gros à tout sauf des trucs genre exceptions, goto, asm inline, variables non initialisés et autres.

Si tu veux tous les détails et que tu es familier avec l'anglais, tu peux regarder sur cppreference : http://en.cppreference.com/w/cpp/language/constexpr

Connectez-vous pour pouvoir poster un message.
Connexion

Pas encore membre ?

Créez un compte en une minute pour profiter pleinement de toutes les fonctionnalités de Zeste de Savoir. Ici, tout est gratuit et sans publicité.
Créer un compte