C permet au compilateur de déduire les paramètres de modèle à partir des paramètres de fonction, permettant ainsi un code concis et sécurisé. Cependant, cette fonctionnalité n'est pas disponible pour les constructeurs de classes. Pourquoi est-ce le cas ?
Dans l'exemple de code, le compilateur ne peut pas déduire le paramètre de modèle pour Variable car le constructeur n'est pas le seul point d'entrée pour la classe. Les constructeurs de copie et l'opérateur d'affectation offrent d'autres moyens de créer et de modifier des objets.
Considérez le scénario suivant :
MyClass m(string s); MyClass *pm; *pm = m;
Dans ce cas, le compilateur ne saurait pas quel type de modèle est requis pour MaClasse pm. Bien qu'il soit possible de déduire le type à partir de l'argument transmis au constructeur, il devient incertain lorsque les affectations sont impliquées, ce qui rend difficile la détermination du type souhaité.
De plus, il peut y avoir des cas où l'inférence de type n'est pas souhaitable. Par exemple, une classe peut avoir des constructeurs qui acceptent différents types à des fins différentes. Déduire le type de modèle pourrait imposer des contraintes involontaires sur l'interface de classe.
Il convient de noter que C 17 devrait introduire la déduction de type à partir des arguments du constructeur. Cela activera la syntaxe suivante :
std::pair p(2, 4.5); std::tuple t(4, 3, 2.5);
Cependant, il est crucial de se rappeler que l'inférence de type est une fonctionnalité pratique et peut ne pas toujours être adaptée. Comprendre les raisons de ses limites aide les développeurs à écrire du code C robuste et maintenable.
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!