Maison  >  Article  >  développement back-end  >  « constexpr » implique-t-il « en ligne » en C 11 ?

« constexpr » implique-t-il « en ligne » en C 11 ?

Susan Sarandon
Susan Sarandonoriginal
2024-11-03 19:05:29938parcourir

Does `constexpr` Imply `inline` in C  11?

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!

Déclaration:
Le contenu de cet article est volontairement contribué par les internautes et les droits d'auteur appartiennent à l'auteur original. Ce site n'assume aucune responsabilité légale correspondante. Si vous trouvez un contenu suspecté de plagiat ou de contrefaçon, veuillez contacter admin@php.cn