Heim >Backend-Entwicklung >C++ >Was ist der Unterschied zwischen einfachen und doppelten kaufmännischen Und-Zeichen in C-Member-Funktionsdeklarationen?

Was ist der Unterschied zwischen einfachen und doppelten kaufmännischen Und-Zeichen in C-Member-Funktionsdeklarationen?

Patricia Arquette
Patricia ArquetteOriginal
2024-12-06 13:34:13428Durchsuche

What's the Difference Between Single and Double Ampersands in C   Member Function Declarations?

Ausführliche Interpretation des kaufmännischen Und-Zeichens in Member-Funktionsdeklarationen

In C können nicht statische Memberfunktionen mit Ref-Qualifizierern dekoriert werden . Diese Qualifizierer geben die Referenzkategorie des impliziten Objektparameters an, der an die Funktion übergeben wird.

Lassen Sie uns die beiden gängigen Ref-Qualifizierer untersuchen:

  1. Einzelnes kaufmännisches Und (&) : Gibt an, dass die Funktion mit einem L-Wert-Verweis auf aufgerufen werden kann Objekt.
  2. Doppeltes kaufmännisches Und (&&): Gibt an, dass die Funktion mit einer R-Wert-Referenz auf das Objekt aufgerufen werden kann.

Ohne Angabe eines Ref-Qualifizierers , die Funktion kann unabhängig von der Wertkategorie des Objekts aufgerufen werden.

Zur Veranschaulichung: Unterschied:

struct Foo {
    void bar() {}  // Default: can be invoked with both lvalues and rvalues
    void bar1() & {}  // Can only be invoked with lvalues
    void bar2() && {}  // Can only be invoked with rvalues
};

Im obigen Beispiel:

  • bar() kann sowohl für L-Werte (Objekte) als auch für R-Werte (temporäre Objekte) aufgerufen werden.
  • bar1() kann nur für L-Werte aufgerufen werden, da es einen L-Wert-Verweis auf das Objekt erfordert.
  • bar2() kann kann nur für R-Werte aufgerufen werden, da hierfür ein R-Wert-Verweis auf das Objekt erforderlich ist.

Hier ist eine Live-Demonstration:

int main() {
    Foo f;
    f.bar();
    f.bar1();
    Foo().bar2();  // Error: bar2 requires an rvalue
}

Wenn Sie diese Ref-Qualifizierer verstehen, können Sie den Zugriff auf steuern Ihre Mitgliedsfunktionen basieren auf der Referenzkategorie des Objekts, auf dem sie aufgerufen werden.

Das obige ist der detaillierte Inhalt vonWas ist der Unterschied zwischen einfachen und doppelten kaufmännischen Und-Zeichen in C-Member-Funktionsdeklarationen?. 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