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 ?
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);
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);
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!