Heim > Backend-Entwicklung > C++ > Warum schlägt „std::make_pair' mit expliziten Vorlagenparametern in C 11 fehl?

Warum schlägt „std::make_pair' mit expliziten Vorlagenparametern in C 11 fehl?

DDD
Freigeben: 2024-12-16 16:58:17
Original
876 Leute haben es durchsucht

Why Does `std::make_pair` Fail with Explicit Template Parameters in C  11?

C 11 make_pair schlägt mit expliziten Vorlagenparametern fehl

Problem:

Bei Verwendung von g 4.7 Wenn -std=c 11 aktiviert ist, schlägt der folgende Code fehl kompilieren:

std::pair<std::string, int>& b = std::make_pair<std::string, int>(s, 7);
Nach dem Login kopieren

Trotz der Existenz der Funktion make_pair tritt beim Compiler ein Fehler auf.

Erklärung:

std::make_pair ist beabsichtigt ohne explizite Angabe von Vorlagenparametern verwendet werden. In C 11 werden zwei R-Wert-Referenzargumente benötigt, T&& und U&&, wobei T und U Vorlagentypparameter sind. Die explizite Angabe der Vorlagenargumente führt jedoch zu einer Diskrepanz zwischen den erwarteten R-Wert-Referenzen und dem bereitgestellten L-Wert-Argument (s im Beispielcode).

Folglich meldet der Compiler:

error: no matching function for call to ‘make_pair(std::string&, int)’
Nach dem Login kopieren

Wenn Vorlagenargumente nicht explizit bereitgestellt werden, erfolgt der Abzug von Vorlagenargumenten. Dadurch kann ein R-Wert-Referenzvorlagenparameter an einen L-Wert gebunden werden, wenn er als Funktionsargument erscheint. Im Fall von std::make_pair ohne Vorlagenargumente leitet der Compiler ab, dass T std::string& ist und U int ist, und bindet s und 7 erfolgreich an die Funktionsargumente.

Lösung:

Die empfohlene Verwendung von std::make_pair besteht darin, die Vorlagenargumente wegzulassen und sich auf die Ableitung der Vorlagenargumente zu verlassen. Durch Befolgen dieser Regel verarbeitet der Compiler die Argumentübereinstimmung korrekt und vermeidet Kompilierungsfehler.

Das obige ist der detaillierte Inhalt vonWarum schlägt „std::make_pair' mit expliziten Vorlagenparametern in C 11 fehl?. 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
Beliebte Tutorials
Mehr>
Neueste Downloads
Mehr>
Web-Effekte
Quellcode der Website
Website-Materialien
Frontend-Vorlage