Constexpr implique-t-il Inline en C 11 ?
La norme C 11 introduit le spécificateur constexpr, qui permet d'évaluer les fonctions et les variables à temps de compilation. Cela a conduit à une certaine confusion quant à la relation entre constexpr et inline.
Le spécificateur en ligne demande au compilateur d'effectuer une expansion en ligne d'une fonction. Cela signifie que le code de la fonction sera inséré directement dans le code où la fonction est appelée, plutôt que de créer une fonction distincte appelée indirectement.
Le spécificateur constexpr n'implique pas explicitement le spécificateur en ligne. Cependant, la norme C 11 stipule que « les fonctions constexpr et les constructeurs constexpr sont implicitement en ligne » (§7.1.5/2).
Implications
Cela signifie que le Le compilateur doit suivre les mêmes règles pour une fonction constexpr que pour une fonction en ligne. En particulier, le compilateur peut intégrer la fonction, même si elle est appelée avec des arguments non constants.
Exemple
Considérons l'exemple suivant :
<code class="cpp">#include <iostream> #include <cstdlib> inline int f(const int x) { return 2*x; } int main(int argc, char* argv[]) { return f(std::atoi(argv[1])); }</code>
Dans cet exemple, la fonction f est inline, même si elle est appelée avec un argument non constant. En effet, la fonction f est déclarée comme inline.
Conclusion
Le spécificateur constexpr n'implique pas explicitement le spécificateur inline. Cependant, la norme C 11 exige que les compilateurs se comportent comme si les fonctions constexpr étaient des fonctions en ligne. Cela signifie qu'un compilateur peut intégrer en toute sécurité une fonction constexpr, même si elle est appelée avec des arguments non constants.
Ce qui précède est le contenu détaillé de. pour plus d'informations, suivez d'autres articles connexes sur le site Web de PHP en chinois!