Maison > développement back-end > C++ > Pourquoi la spécification explicite des paramètres de modèle dans « make_pair » de C 11 échoue-t-elle à se compiler ?

Pourquoi la spécification explicite des paramètres de modèle dans « make_pair » de C 11 échoue-t-elle à se compiler ?

Mary-Kate Olsen
Libérer: 2024-12-21 11:43:17
original
151 Les gens l'ont consulté

Why Does Explicitly Specifying Template Parameters in C  11's `make_pair` Fail to Compile?

C 11 make_pair avec des paramètres de modèle explicites ne parvient pas à se compiler

En C 11, la fonction make_pair est conçue pour faciliter la création de paires avec types de données spécifiés. Cependant, spécifier explicitement les paramètres du modèle dans l'appel de fonction peut entraîner des erreurs de compilation.

La fonction make_pair suit une syntaxe de modèle :

template<typename T, typename U>
make_pair(T&& argT, U&& argU);
Copier après la connexion

Cette syntaxe indique que make_pair accepte deux références rvalue, argT et argU, et déduit les paramètres de type de modèle T et U à partir des arguments spécifiés.

Lorsque vous fournissez explicitement les arguments du modèle, comme in :

std::make_pair<std::string, int>(s, 7);
Copier après la connexion

des paramètres de référence rvalue sont attendus. Cependant, l’argument lvalue transmis ne satisfait pas à cette exigence. Par conséquent, le compilateur ne parvient pas à établir une correspondance entre les types d'arguments et les types de paramètres de référence rvalue.

En revanche, lorsque les arguments du modèle sont omis, le compilateur effectue une déduction des arguments du modèle, qui lie avec succès s à T ( std::string&) et 7 à U (int&&). Ce processus est facilité par le comportement unique des références rvalue dans les paramètres du modèle, où elles peuvent se lier à n'importe quel type du même paramètre de modèle, quel que soit l'état lvalue ou rvalue.

Pour résoudre l'erreur, omettez simplement le explicite spécification des paramètres du modèle.

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