Heim >Backend-Entwicklung >C++ >Warum ist die Überlastungsauflösung zwischen „int', „int&&' und „const int&' in C nicht eindeutig?
Mehrdeutigkeit der Überlastungsauflösung bei Vorhandensein von Wert-, R-Wert-Referenz- und Const-L-Wert-Referenzüberladungen
In C, wenn ein Funktionsaufruf mehrere realisierbare Funktionen umfasst Bei Überladungen bestimmt die Überladungsauflösung die beste Übereinstimmung basierend auf einer strikten Teilreihenfolge. Bestimmte Szenarien führen jedoch zu Mehrdeutigkeiten, wie der folgende Code zeigt:
int f( int ); int f( int && ); int f( int const & ); int q = f( 3 );
Während dieser Aufruf mehrdeutig ist, führt das Entfernen von f( int ) dazu, dass sowohl Clang als auch GCC die R-Wert-Referenzüberladung f( int && ) bevorzugen. über die lvalue-Referenz f( int const & ). Das Entfernen einer Referenzüberladung führt jedoch zu Mehrdeutigkeiten mit f( int).
Regeln der Überlastauflösung
Bei der Überladungsauflösung muss eine Parameterinitialisierung innerhalb eines Funktionsaufrufs erfolgen eine bessere Übereinstimmung als die beiden anderen Initialisierungen. Beim Vergleich zweier Initialisierungen kann es sein, dass eine besser, nicht unterscheidbar oder schlechter ist. Im gegebenen Szenario machen die Sonderregeln für die direkte Referenzbindung int && besser als const int &, aber weder ist es besser noch schlechter als int. Daher gibt es keine beste Übereinstimmung.
Sonderregel für R-Wert-Referenzen
Interessanterweise gilt die Regel, die R-Wert-Referenzen gegenüber L-Wert-Referenzen bevorzugt, nur, wenn beide Initialisierungen Referenzbindungen beinhalten. Wenn es sich bei einer Initialisierung jedoch um eine Nicht-Referenzbindung handelt, wie im Fall von int, gilt diese Regel nicht.
Mögliche zukünftige Erweiterungen
Der Vorschlag zur Priorisierung int && over int bei der Überlastungsauflösung zielt darauf ab, einen effizienteren Mechanismus für die Verwaltung des Eigentums bereitzustellen. Durch die Bindung der Referenz an einen Initialisierer stellt dieser Ansatz sicher, dass das Objekt Eigentum ist und direkt manipuliert werden kann, wodurch möglicherweise der Kopieraufwand entfällt.
Das obige ist der detaillierte Inhalt vonWarum ist die Überlastungsauflösung zwischen „int', „int&&' und „const int&' in C nicht eindeutig?. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!