En C 11, std::make_pair prend deux arguments, des références à des rvalues ( T&& et U&&). Cependant, la spécification explicite des paramètres du modèle lors de son invocation empêche la déduction des arguments, ce qui entraîne la substitution de références rvalue dans la déclaration du modèle de fonction. Cette incompatibilité, où les arguments lvalue ne peuvent pas se lier aux références rvalue, provoque des erreurs de compilation.
Tentative d'utiliser std::make_pair avec des arguments de modèle explicitement fournis (par exemple, std ::make_pair
Les paramètres de référence Rvalue dans les modèles possèdent la capacité unique de se lier à n'importe quelle instance de leur paramètre de type de modèle, qu'il s'agisse ou non une lvalue, une rvalue ou même qualifiée.
Lorsque les arguments du modèle sont omis lors de l'invocation de std::make_pair, la déduction des arguments du modèle a lieu. Le compilateur déduit les types de modèles à partir des arguments fournis, dans ce cas, std::string et int. Les paramètres de référence rvalue (T&& et U&&) sont déduits respectivement de std::string& et int&&. L'argument de modèle résultant pour T est réduit, éliminant la référence supplémentaire, permettant la liaison à l'argument lvalue (std::string).
Pour éviter de telles erreurs, évitez en spécifiant explicitement les arguments du modèle pour std::make_pair, sauf si nécessaire. Autorisez le compilateur à effectuer la déduction des arguments, ce qui conduit généralement au comportement souhaité. Si un résultat inattendu se produit, une erreur de compilation claire aidera à identifier le problème.
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!