Maison > développement back-end > C++ > Pourquoi la spécification explicite des paramètres de modèle dans `std::make_pair` provoque-t-elle des erreurs de compilation dans C 11 ?

Pourquoi la spécification explicite des paramètres de modèle dans `std::make_pair` provoque-t-elle des erreurs de compilation dans C 11 ?

Susan Sarandon
Libérer: 2024-12-13 01:54:16
original
993 Les gens l'ont consulté

Why Does Explicitly Specifying Template Parameters in `std::make_pair` Cause Compilation Errors in C  11?

Incapacité de std::make_pair à compiler lors de la spécification explicite des paramètres de modèle en C 11

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.

Cause première de l'erreur de compilation

Tentative d'utiliser std::make_pair avec des arguments de modèle explicitement fournis (par exemple, std ::make_pair()) conduit à une inadéquation entre les références rvalue attendues et l'argument lvalue réel (std::string).

Le rôle des références Rvalue dans les modèles

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.

Comportement du compilateur avec des paramètres de modèle omis

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).

Solution et meilleures pratiques

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!

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