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!