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
Freigeben: 2024-12-21 11:43:17
Original
151 Leute haben es durchsucht

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);
Nach dem Login kopieren

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);
Nach dem Login kopieren

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!

Quelle:php.cn
Erklärung dieser Website
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
Neueste Artikel des Autors
Beliebte Tutorials
Mehr>
Neueste Downloads
Mehr>
Web-Effekte
Quellcode der Website
Website-Materialien
Frontend-Vorlage