Heim > Backend-Entwicklung > C++ > Was bedeutet ein einzelnes kaufmännisches Und (&) in C-Member-Funktionsparametern?

Was bedeutet ein einzelnes kaufmännisches Und (&) in C-Member-Funktionsparametern?

Barbara Streisand
Freigeben: 2024-12-13 09:49:11
Original
851 Leute haben es durchsucht

What Does a Single Ampersand (&) Mean in C   Member Function Parameters?

Untersuchung der Rolle des einzelnen kaufmännischen Und-Zeichens in Parametern von Mitgliedsfunktionen

In der C-Programmierung umfasst die Syntax von Mitgliedsfunktionen häufig die Verwendung von kaufmännischen Und-Zeichen Symbole (&) als Ref-Qualifizierer für nicht statische Memberfunktionen. Diese Symbole können das Verhalten des Funktionsaufrufs basierend auf der Wertkategorie des Objekts beeinflussen, das zum Aufrufen verwendet wird. In diesem Artikel geht es um die Bedeutung der Verwendung eines einzelnen kaufmännischen Und-Zeichens (&) in diesem Zusammenhang.

Konkret bedeutet das Vorhandensein eines einzelnen kaufmännischen Und-Zeichens & nach der Parameterliste einer Mitgliedsfunktionsdeklaration, dass die Funktion wann aufgerufen wird Das Objekt ist eine L-Wert-Referenz oder ein reguläres Nicht-Referenzobjekt. Dadurch kann die Funktion direkt über den Namen des Objekts oder über eine L-Wert-Referenz aufgerufen werden. Zum Beispiel:

class wrap {
  public:
    operator obj() const & { ... } // Invocable via lvalue reference
};
Nach dem Login kopieren

Im Gegensatz dazu zeigt das Fehlen eines Ref-Qualifizierers, d. h. kein kaufmännisches Und in der Deklaration, an, dass die Funktion unabhängig von der Wertkategorie des Objekts aufgerufen werden kann. Dies bedeutet, dass es entweder mit einer L-Wert- oder einer R-Wert-Referenz aufgerufen werden kann.

Um den Unterschied besser zu verstehen, betrachten Sie den folgenden Codeausschnitt:

struct foo {
  void bar() {} // Function without a ref-qualifier
  void bar1() & {} // Function with an lvalue reference ref-qualifier
  void bar2() && {} // Function with an rvalue reference ref-qualifier
};
Nach dem Login kopieren

In diesem Beispiel:

  • bar kann sowohl mit L-Wert- als auch mit R-Wert-Referenzen aufgerufen werden.
  • bar1 kann nur aufgerufen werden wird mit L-Wert-Referenzen oder regulären Objekten (d. h. Objekten ohne Referenz) aufgerufen.
  • bar2 kann nur mit R-Wert-Referenzen aufgerufen werden.

Um dieses Verhalten zu veranschaulichen, demonstriert der folgende Code, wie das geht Diese Funktionen können basierend auf der Wertkategorie des Objekts aufgerufen werden:

foo().bar(); // Always fine
foo().bar1(); // Doesn't compile because bar1 requires an lvalue
foo().bar2();

foo f;
f.bar(); // Always fine
f.bar1();
f.bar2(); // Doesn't compile because bar2 requires an rvalue
Nach dem Login kopieren

Zusammenfassend lässt sich sagen, dass ein einzelnes kaufmännisches Und vorhanden ist & nach der Parameterliste einer Member-Funktionsdeklaration gibt an, dass die Funktion aufgerufen werden kann, wenn das Objekt eine L-Wert-Referenz ist. Dies bietet eine Möglichkeit, den Aufruf der Funktion basierend auf der Wertkategorie des verwendeten Objekts einzuschränken.

Das obige ist der detaillierte Inhalt vonWas bedeutet ein einzelnes kaufmännisches Und (&) in C-Member-Funktionsparametern?. 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