Heim > Backend-Entwicklung > C++ > Wie geht C Overload Resolution mit „int', „int&&' und „const int&' um?

Wie geht C Overload Resolution mit „int', „int&&' und „const int&' um?

Patricia Arquette
Freigeben: 2024-11-20 19:58:16
Original
339 Leute haben es durchsucht

How Does C   Overload Resolution Handle `int`, `int&&`, and `const int&`?

Überladungsauflösung zwischen Wert, R-Wert-Referenz, Const-L-Wert-Referenz

Berücksichtigen Sie die folgenden Funktionsüberladungen:

int f( int );
int f( int && );
int f( int const & );
Nach dem Login kopieren

Der Aufruf int q = f( 3 ); ist mehrdeutig, da alle drei Überladungen für das Argument zulässig sind. Die Regeln für die Überlastungsauflösung besagen, dass es eine Parameterinitialisierung geben muss, die besser ist als die beiden anderen.

In diesem Fall sind die Parameterinitialisierungen:

  • int von 3
  • int&& from 3
  • int const& from 3

Allerdings ist keine dieser Initialisierungen besser als die anderen beiden. Daher ist der Aufruf mehrdeutig.

Das Entfernen von f( int ) führt dazu, dass Clang und GCC die R-Wert-Referenz (int&&) der L-Wert-Referenz (int const&) vorziehen. Dies liegt daran, dass die R-Wert-Referenz an den R-Wert 3 gebunden werden kann, die L-Wert-Referenz jedoch nicht. Das Entfernen einer Referenzüberladung führt zu Mehrdeutigkeiten mit f( int ).

Dieses Verhalten ist auf die Tatsache zurückzuführen, dass int sowohl zu int&& als auch zu int const& äquivalent ist. Allerdings sind int&& und int const& nicht äquivalent zueinander. Die Regel für die Auswahl zwischen ihnen lautet, dass int&& besser ist als int const&, wenn beide Referenzbindungen sind und int&& an einen R-Wert und int const& an einen L-Wert bindet.

Diese Regel gilt nicht, wenn eine der Initialisierungen ist keine Referenzbindung. Daher ist int nicht von int&& und int const& zu unterscheiden.

Es besteht keine Chance, dass int&& in einem zukünftigen Standard dem int vorgezogen wird. Die vorgeschlagene Regel würde eine Referenzbindung zu einer besseren Übereinstimmung machen als eine Nicht-Referenzbindung, was den bestehenden Regeln für die Überlastungsauflösung widersprechen würde.

Das obige ist der detaillierte Inhalt vonWie geht C Overload Resolution mit „int', „int&&' und „const int&' um?. 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
Neueste Artikel des Autors
Beliebte Tutorials
Mehr>
Neueste Downloads
Mehr>
Web-Effekte
Quellcode der Website
Website-Materialien
Frontend-Vorlage