Heim >Backend-Entwicklung >C++ >Warum führt die explizite Angabe von Vorlagenparametern in „std::make_pair' zu Kompilierungsfehlern in C 11?
In C 11 benötigt std::make_pair zwei Argumente, Verweise auf R-Werte ( T&& und U&&). Die explizite Angabe von Vorlagenparametern während des Aufrufs verhindert jedoch die Argumentableitung, was zur Ersetzung von R-Wert-Referenzen innerhalb der Funktionsvorlagendeklaration führt. Diese Nichtübereinstimmung, bei der L-Wert-Argumente nicht an R-Wert-Referenzen gebunden werden können, führt zu Kompilierungsfehlern.
Der Versuch, std::make_pair mit explizit bereitgestellten Vorlagenargumenten zu verwenden (z. B. std ::make_pair
R-Wert-Referenzparameter in Vorlagen verfügen über die einzigartige Fähigkeit, sich an jede Instanz ihres Vorlagentypparameters zu binden , unabhängig davon, ob es sich um einen L-Wert, einen R-Wert oder sogar einen qualifizierten Wert handelt.
Wenn Vorlagenargumente während des std::make_pair-Aufrufs weggelassen werden, erfolgt eine Ableitung der Vorlagenargumente. Der Compiler leitet Vorlagentypen aus den bereitgestellten Argumenten ab, in diesem Fall std::string und int. Die R-Wert-Referenzparameter (T&& und U&&) werden aus std::string& bzw. int&& abgeleitet. Das resultierende Vorlagenargument für T wird reduziert, wodurch die zusätzliche Referenz entfällt und eine Bindung an das Lvalue-Argument (std::string) möglich wird.
Um solche Fehler zu vermeiden, unterlassen Sie dies explizite Angabe von Vorlagenargumenten für std::make_pair, sofern nicht erforderlich. Lassen Sie den Compiler die Argumentableitung durchführen, die normalerweise zum gewünschten Verhalten führt. Wenn ein unerwartetes Ergebnis auftritt, hilft ein eindeutiger Kompilierungsfehler dabei, das Problem zu lokalisieren.
Das obige ist der detaillierte Inhalt vonWarum führt die explizite Angabe von Vorlagenparametern in „std::make_pair' zu Kompilierungsfehlern in C 11?. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!