Maison > développement back-end > C++ > Le traitement des fonctions de bibliothèque standard non constexpr comme « constexpr » est-il conforme à la norme C ?

Le traitement des fonctions de bibliothèque standard non constexpr comme « constexpr » est-il conforme à la norme C ?

Linda Hamilton
Libérer: 2024-12-03 19:32:14
original
267 Les gens l'ont consulté

Is Treating Non-constexpr Standard Library Functions as `constexpr` Conforming to the C   Standard?

Traitement des fonctions de bibliothèque standard non constexpr comme Constexpr : une analyse de conformité

La question se pose de savoir si une extension du compilateur qui traite la norme non constexpr la bibliothèque fonctionne comme constexpr est conforme. Malgré le caractère permissif du projet de norme C 11, qui suggérait qu'un tel traitement pourrait être autorisé, les développements ultérieurs ont clarifié la question.

C 14 Interdiction explicite

Dans C 14 , le projet de section standard 17.6.5.6 indique explicitement que les implémentations ne doivent déclarer aucune signature de fonction de bibliothèque standard comme constexpr, sauf si cela est explicitement requis. Cette décision exclut le traitement conforme des fonctions de bibliothèque standard non constexpr en tant que constexpr.

Extension GCC

GCC a implémenté une extension qui traite certaines fonctions intégrées comme constexpr. . Cependant, cette extension est considérée comme non conforme sur la base de la norme C 14 mise à jour.

Règle d'as-if et comportement observable

Au départ, il n'était pas clair si l'as- si la règle permettait de traiter les fonctions non-constexpr comme constexpr. La règle du « comme si » permet aux implémentations de s'écarter des exigences de la norme tant qu'elles produisent un comportement observable équivalent. Cependant, la modification du statut constexpr des fonctions affecte le comportement observable, comme le démontrent les tests SFINAE, qui se comporteraient différemment en cas d'utilisation d'un code identique.

Atténuation conforme

Pour rendre le Si l'extension GCC est conforme, le compilateur devra émettre des avertissements en mode de conformité stricte (par exemple, -std=c 11 -pedantic) lorsque Les fonctions de bibliothèque standard non constexpr sont utilisées dans les contextes constexpr.

Exception relative aux intrinsèques

Les intrinsèques du compilateur ne sont pas couverts par la norme et peuvent être exemptés de la règle de fonction constexpr. L'utilisation d'intrinsèques intégrés (par exemple, __builtin_cos) comme constexpr pourrait potentiellement être autorisée.

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!

source:php.cn
Déclaration de ce site Web
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
Derniers articles par auteur
Tutoriels populaires
Plus>
Derniers téléchargements
Plus>
effets Web
Code source du site Web
Matériel du site Web
Modèle frontal