Heim >Backend-Entwicklung >C++ >Warum kann die explizite Angabe von Vorlagenparametern in „make_pair' von C 11 nicht kompiliert werden?

Warum kann die explizite Angabe von Vorlagenparametern in „make_pair' von C 11 nicht kompiliert werden?

Mary-Kate Olsen
Mary-Kate OlsenOriginal
2024-12-21 11:43:17203Durchsuche

Why Does Explicitly Specifying Template Parameters in C  11's `make_pair` Fail to Compile?

C 11 make_pair mit expliziten Vorlagenparametern schlägt beim Kompilieren fehl

In C 11 soll die Funktion make_pair die Erstellung von Paaren mit erleichtern angegebenen Datentypen. Die explizite Angabe der Vorlagenparameter im Funktionsaufruf kann jedoch zu Kompilierungsfehlern führen.

Die Funktion make_pair folgt einer Vorlagensyntax:

template<typename T, typename U>
make_pair(T&& argT, U&& argU);

Diese Syntax gibt an, dass make_pair zwei R-Wert-Referenzen akzeptiert. argT und argU und leitet die Vorlagentypparameter T und U aus den angegebenen Argumenten ab.

Bei expliziter Bereitstellung der Vorlagenargumente, als in:

std::make_pair<std::string, int>(s, 7);

rvalue-Referenzparameter werden erwartet. Das übergebene L-Wert-Argument s erfüllt diese Anforderung jedoch nicht. Daher kann der Compiler keine Übereinstimmung zwischen den Argumenttypen und den R-Wert-Referenzparametertypen herstellen.

Wenn dagegen die Vorlagenargumente weggelassen werden, führt der Compiler eine Vorlagenargumentableitung durch, die s erfolgreich an T bindet ( std::string&) und 7 bis U (int&&). Dieser Prozess wird durch das einzigartige Verhalten von R-Wert-Referenzen innerhalb von Vorlagenparametern erleichtert, wo sie an jeden Typ desselben Vorlagenparameters gebunden werden können, unabhängig vom L-Wert- oder R-Wert-Status.

Um den Fehler zu beheben, lassen Sie einfach das explizite weg Spezifikation der Vorlagenparameter.

Das obige ist der detaillierte Inhalt vonWarum kann die explizite Angabe von Vorlagenparametern in „make_pair' von C 11 nicht kompiliert werden?. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!

Stellungnahme:
Der Inhalt dieses Artikels wird freiwillig von Internetnutzern beigesteuert und das Urheberrecht liegt beim ursprünglichen Autor. Diese Website übernimmt keine entsprechende rechtliche Verantwortung. Wenn Sie Inhalte finden, bei denen der Verdacht eines Plagiats oder einer Rechtsverletzung besteht, wenden Sie sich bitte an admin@php.cn