Modèles spécialisés dans l'espace de noms std
Les utilisateurs peuvent ajouter des spécialisations explicites à l'espace de noms std, mais certains modèles sont interdits. Ces restrictions garantissent que le comportement de la bibliothèque standard reste cohérent et bien défini.
Spécialisations interdites :
Selon le standard C, les modèles suivants ne peuvent pas être spécialisés :
-
numeric_limits : Interdit pour les types standards non arithmétiques (par exemple, complexe).
-
shared_ptr : Les spécialisations doivent être CopyConstructible, CopyAssignable, LessThanComparable et convertible en bool.
-
weak_ptr : Les spécialisations doivent être CopyConstructible et CopyAssignable.
-
hash : Les spécialisations doivent répondre les exigences du hachage du modèle de classe.
-
Modèles de classe dans : Le comportement du programme n'est pas défini si des spécialisations sont ajoutées pour ces modèles.
-
Complexe : Non défini pour les types autres que float, double ou long double.
-
Atomic : Les spécialisations doivent avoir un constructeur de copie supprimé, un opérateur d'affectation de copie et un constructeur de valeur constexpr.
-
Fonction_unaire et fonction_binaire :Obsolètes et ne doivent pas être spécialisées.
Restrictions supplémentaires :
De plus, la norme interdit le suivant :
- Ajout de déclarations ou de définitions à l'espace de noms std ou à tout sous-espace de noms sans répondre à des exigences spécifiques.
- Spécialisation explicite des fonctions membres ou des modèles membres des classes de bibliothèque standard.
- Spécialisation explicite ou partielle des modèles de classes membres des classes de bibliothèque standard.
Spécialisations autorisées :
Les spécialisations de modèles ne sont autorisées que si :
- Ils dépendent d'un type défini par l'utilisateur.
- Ils respectent les exigences de la bibliothèque standard pour le modèle d'origine.
- Ils ne sont pas explicitement interdits comme indiqué ci-dessus.
En suivant ces restrictions, les programmeurs peuvent garantir l'intégrité et la prévisibilité de l'espace de noms std et de la bibliothèque standard dans son ensemble.
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!