Maison >développement back-end >C++ >Le traitement extensionnel de GCC des fonctions de bibliothèque standard non constexpr dans des contextes Constexpr est-il conforme à la norme C ?

Le traitement extensionnel de GCC des fonctions de bibliothèque standard non constexpr dans des contextes Constexpr est-il conforme à la norme C ?

Mary-Kate Olsen
Mary-Kate Olsenoriginal
2024-11-28 21:33:14840parcourir

Is GCC's Extensional Treatment of Non-constexpr Standard Library Functions in Constexpr Contexts Conforming to the C   Standard?

Le traitement extensionnel des fonctions de bibliothèque standard non constexpr est-il conforme ?

La capacité de GCC à traiter les fonctions de bibliothèque standard non constexpr comme constexpr dans certaines situations soulèvent des questions quant à la conformité.

Contradiction dans Normes

Dans le projet de norme C 11, il est apparu que traiter les fonctions intégrées comme constexpr serait explicitement autorisé. Cependant, le consensus a changé dans C 12 et la proposition a changé, ce qui a conduit à C 14 interdisant explicitement ce comportement.

Règle du "comme si"

Dans C 11, Il n’était pas clair si la règle du « comme si » autorisait ce comportement. Certains avis suggèrent que cela pourrait être le cas, mais cette interprétation n'est pas confirmée dans la résolution du numéro 2013 du LWG, qui traite de ce sujet spécifique.

Mise en œuvre de GCC

GCC mis en œuvre ce comportement est basé sur la résolution proposée antérieurement par LWG 2013, qui permettait un traitement implicite en tant que fonctions constexpr. Cependant, la résolution finale a changé, et cette extension est désormais non conforme en C 14.

Conformité en mode strict

Pour se conformer à la norme C 14, GCC devrait émettre un avertissement en mode de conformité stricte (-std=c 11 -pedantic ou -std=c 14 -pedantic) en cas de rencontre fonctions de bibliothèque non constexpr utilisées dans les contextes constexpr. Alternativement, ce comportement doit être désactivé dans ces modes.

Exemption des intrinsèques

Les intrinsèques du compilateur ne sont pas couverts par la norme et, par conséquent, ils peuvent être traités différemment. Il est probable que l'utilisation des intrinsèques du compilateur dans des contextes constexpr reste acceptable.

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