Maison > développement back-end > C++ > Pourquoi `std::make_pair` échoue-t-il avec les paramètres de modèle explicites dans C 11 ?

Pourquoi `std::make_pair` échoue-t-il avec les paramètres de modèle explicites dans C 11 ?

DDD
Libérer: 2024-12-16 16:58:17
original
882 Les gens l'ont consulté

Why Does `std::make_pair` Fail with Explicit Template Parameters in C  11?

C 11 make_pair échoue avec les paramètres de modèle explicites

Problème :

Lors de l'utilisation de g 4.7 avec -std=c 11 activé, le code suivant ne parvient pas à compile :

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

Malgré l'existence de la fonction make_pair, les erreurs du compilateur sont générées.

Explication :

std::make_pair est destiné à utiliser sans spécifier explicitement les paramètres du modèle. En C 11, il prend deux arguments de référence rvalue, T&& et U&&, où T et U sont des paramètres de type modèle. Cependant, la spécification explicite des arguments du modèle entraîne une inadéquation entre les références rvalue attendues et l'argument lvalue fourni (s dans l'exemple de code).

Par conséquent, le compilateur rapporte :

error: no matching function for call to ‘make_pair(std::string&, int)’
Copier après la connexion

Lorsque les arguments du modèle ne sont pas explicitement fournis, une déduction des arguments du modèle a lieu. Cela permet à un paramètre de modèle de référence rvalue de se lier à une lvalue lorsqu'elle apparaît comme argument de fonction. Dans le cas de std::make_pair sans arguments de modèle, le compilateur déduit que T est std::string& et U est int et lie avec succès s et 7 aux arguments de la fonction.

Solution :

L'utilisation recommandée de std::make_pair est d'omettre les arguments du modèle, en s'appuyant sur la déduction des arguments du modèle. En suivant cette règle, le compilateur gérera correctement la correspondance des arguments et évitera les erreurs de compilation.

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