Optimisation des expressions constantes : la longueur des chaînes peut-elle être déterminée au moment de la compilation ?
Dans la quête d'optimisation du code, un développeur tente de calculer la longueur d'une chaîne littérale au moment de la compilation à l'aide d'une fonction récursive. Cette fonction évalue la chaîne caractère par caractère et renvoie la longueur.
Observations initiales :
La fonction semble fonctionner comme prévu, renvoyant les longueurs correctes au moment de l'exécution et générant code assembleur qui suggère que le calcul a lieu au moment de la compilation. Cela soulève la question :
Est-il garanti que la fonction de longueur s'exécutera au moment de la compilation ?
Le point de vue de la norme :
Les expressions constantes ne doivent pas être explicitement évaluées au moment de la compilation par le standard C. Cependant, une note non normative suggère cette possibilité.
Application de l'exécution au moment de la compilation :
Pour garantir l'évaluation au moment de la compilation, la fonction peut être affectée à un constexpr variable. Selon les directives C 11, le marquage d'une variable constexpr nécessite son évaluation au moment de la compilation.
Considérations supplémentaires :
Bjarne Stroustrup, le créateur de C , résume les conditions de évaluation au moment de la compilation comme :
Conclusion :
Bien que cela ne soit pas explicitement indiqué dans le L'évaluation standard au moment de la compilation des fonctions constexpr peut être garantie en utilisant des expressions constantes ou en initialisant des variables constexpr. Cela ouvre des possibilités d'optimisation des chaînes et d'autres calculs au moment de la compilation, permettant une exécution de code plus efficace.
Clause de non-responsabilité: Toutes les ressources fournies proviennent en partie d'Internet. En cas de violation de vos droits d'auteur ou d'autres droits et intérêts, veuillez expliquer les raisons détaillées et fournir une preuve du droit d'auteur ou des droits et intérêts, puis l'envoyer à l'adresse e-mail : [email protected]. Nous nous en occuperons pour vous dans les plus brefs délais.
Copyright© 2022 湘ICP备2022001581号-3