Maison > développement back-end > C++ > Pourquoi les paramètres du modèle C ne peuvent-ils pas être déduits des constructeurs de classe, contrairement aux fonctions ?

Pourquoi les paramètres du modèle C ne peuvent-ils pas être déduits des constructeurs de classe, contrairement aux fonctions ?

Patricia Arquette
Libérer: 2024-12-03 15:13:13
original
637 Les gens l'ont consulté

Why Can't C   Template Parameters Be Inferred from Class Constructors, Unlike Functions?

Pourquoi les paramètres de modèle ne peuvent-ils pas être déduits des constructeurs de classe ?

En C , les paramètres de modèle peuvent être déduits des paramètres de fonction, ce qui permet une déduction de type pratique. Cependant, cette inférence ne s'étend pas aux constructeurs de classe.

Raison :
Le manque d'inférence pour les constructeurs de classe vient du fait qu'un constructeur n'est pas le seul point d'entrée pour un classe. Les constructeurs de copie et les opérateurs d'affectation peuvent également manipuler des objets sans disposer d'informations explicites sur les paramètres du modèle.

Considérez l'exemple suivant :

MyClass m(string s);
MyClass *pm;
*pm = m;
Copier après la connexion

Dans ce scénario, il est difficile pour le compilateur de déterminer le paramètre de modèle pour pm, car m et pm ne disposent pas de cette information. Par conséquent, autoriser l'inférence pour les constructeurs de classe introduirait une incertitude et des difficultés syntaxiques.

Exceptions en C 17 :
En C 17, une exception à cette règle a été introduite. Pour certains types, tels que std::pair et std::tuple, les paramètres du modèle peuvent être déduits des arguments du constructeur.

Lorsque l'inférence n'est pas souhaitable :
Dans certains cas, déduire les paramètres de modèle des constructeurs peuvent ne pas être souhaitables. Considérons une classe qui utilise des paramètres de modèle par défaut, que le constructeur ne peut pas remplacer. Si l'inférence était autorisée, elle pourrait potentiellement remplacer les valeurs par défaut et conduire à un comportement inattendu.

Par conséquent, même si l'inférence des paramètres de modèle pour les paramètres de fonction améliore la concision du code, l'absence d'une telle inférence pour les constructeurs de classe garantit la clarté et empêche les erreurs potentielles. ambiguïtés dans l'utilisation de la classe.

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