Maison >développement back-end >C++ >Pourquoi `std::make_pair` échoue-t-il avec les paramètres de modèle explicites dans 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);
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)’
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!