"Si un ouvrier veut bien faire son travail, il doit d'abord affûter ses outils." - Confucius, "Les Entretiens de Confucius. Lu Linggong"
Page de garde > La programmation > 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 ?

Publié le 2024-11-15
Parcourir:905

 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, complex).
  • 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 : Les spécialisations explicites de tout modèle de classe dans ne sont pas définies, sauf indication contraire.
  • Locales : Avoir les spécialisations requises.
  • istreambuf_iterator : Nécessite un constructeur de copie trivial, constructeur par défaut constexpr et destructeur trivial.
  • complexe : Seules les spécialisations float, double et double longue sont autorisées.
  • atomic : Les spécialisations doivent avoir un constructeur de copie supprimé, un opérateur d'affectation de copie et un constructeur de valeur constexpr.
  • unary_function. et fonction_binaire : Obsolète et ne doit pas être spécialisé.

Restrictions supplémentaires

  • Selon la clause 17.6.4.2.1, le comportement est undefined 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 pour le modèle original.

Dernier tutoriel Plus>

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