Maison > développement back-end > C++ > Pourquoi l'inférence de paramètres de modèle C ne fonctionne-t-elle pas avec les constructeurs (jusqu'à C 17) ?

Pourquoi l'inférence de paramètres de modèle C ne fonctionne-t-elle pas avec les constructeurs (jusqu'à C 17) ?

DDD
Libérer: 2024-11-29 17:11:11
original
671 Les gens l'ont consulté

Why Doesn't C   Template Parameter Inference Work with Constructors (Until C  17)?

Pourquoi C ne peut-il pas déduire les paramètres de modèle à partir des constructeurs ?

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;
Copier après la connexion

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.

Développement C 17

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);
Copier après la connexion

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!

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
Tutoriels populaires
Plus>
Derniers téléchargements
Plus>
effets Web
Code source du site Web
Matériel du site Web
Modèle frontal