Maison >développement back-end >C++ >Quelles sont les restrictions et les autorisations de spécialisation dans l'espace de noms std ?

Quelles sont les restrictions et les autorisations de spécialisation dans l'espace de noms std ?

Barbara Streisand
Barbara Streisandoriginal
2024-11-02 13:31:30914parcourir

 What are the Restrictions and Allowances for Specialization within the std Namespace?

Spécialisation dans l'espace de noms std : restrictions et autorisations

Malgré la possibilité d'ajouter des spécialisations explicites à l'espace de noms std, certains modèles ont des interdictions explicites . Comprendre ces restrictions est crucial pour garantir la validité du code utilisant les spécialisations d'espace de noms std.

Modèles interdits de spécialisation

  • numeric_limits : Non autorisé pour les types standards non arithmétiques (par exemple, complexe).
  • shared_ptr : Doit être CopyConstructible, CopyAssignable, LessThanComparable et convertible en bool.
  • weak_ptr : Doit être CopyConstructible et CopyAssignable.
  • std::hash : Les spécialisations doivent répondre aux exigences du hachage du modèle de classe.
  • type_traits : Spécialisations explicites de tous les modèles de classe dans ne sont pas définis sauf indication contraire.
  • Locales : Avoir les spécialisations requises.
  • istreambuf_iterator : Nécessite un constructeur de copie trivial, un constructeur par défaut constexpr et un destructeur trivial .
  • complexe : Seules les spécialisations float, double et long double sont autorisées.
  • atomic : Les spécialisations doivent avoir un constructeur de copie supprimé, copie opérateur d'affectation et constructeur de valeur constexpr.
  • fonction_unaire et fonction_binaire : Obsolètes et ne doivent pas être spécialisées.

Restrictions supplémentaires

  • Selon la clause 17.6.4.2.1, le comportement n'est pas défini lors de l'ajout de déclarations ou de définitions à l'espace de noms std ou à ses sous-espaces de noms. Les exceptions s'appliquent uniquement aux spécialisations de modèles qui dépendent de types définis par l'utilisateur et répondent aux exigences standard.
  • Il est interdit de spécialiser explicitement une fonction membre d'un modèle de classe de bibliothèque standard, d'un modèle de fonction membre ou d'un modèle de classe membre.

Modèles autorisés pour la spécialisation

Les modèles non explicitement interdits peuvent être spécialisés s'ils dépendent de types définis par l'utilisateur et répondent aux exigences standard du modèle d'origine.

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