Heim >Backend-Entwicklung >C++ >Warum führt die explizite Angabe von Vorlagenparametern in „std::make_pair' zu Kompilierungsfehlern in C 11?

Warum führt die explizite Angabe von Vorlagenparametern in „std::make_pair' zu Kompilierungsfehlern in C 11?

Susan Sarandon
Susan SarandonOriginal
2024-12-13 01:54:16979Durchsuche

Why Does Explicitly Specifying Template Parameters in `std::make_pair` Cause Compilation Errors in C  11?

Std::make_pair kann nicht kompiliert werden, wenn in C 11 explizit Vorlagenparameter angegeben werden

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.

Ursache des Kompilierungsfehlers

Der Versuch, std::make_pair mit explizit bereitgestellten Vorlagenargumenten zu verwenden (z. B. std ::make_pair()) führt zu einer Nichtübereinstimmung zwischen den erwarteten R-Wert-Referenzen und das eigentliche L-Wert-Argument (std::string).

Die Rolle von R-Wert-Referenzen in Vorlagen

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.

Compiler-Verhalten bei weggelassener Vorlage Parameter

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.

Lösung und Best Practice

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!

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