Heim >Backend-Entwicklung >C++ >Was bedeutet das einzelne kaufmännische Und (&) in einer C-Member-Funktionsdeklaration?

Was bedeutet das einzelne kaufmännische Und (&) in einer C-Member-Funktionsdeklaration?

Susan Sarandon
Susan SarandonOriginal
2024-12-15 11:55:09691Durchsuche

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

Verstehen des einzelnen kaufmännischen Und-Zeichens in der Member-Funktionsdeklaration

Im angegebenen Codeausschnitt:

class wrap {
   operator obj() const & { ... }   //Copy from me.
   operator obj() && { ... }  //Move from me.
};

wir stoßen auf zwei Member-Funktionsdeklarationen mit unterschiedlichen Referenzen -Qualifizierer (& und &&). Was bedeutet jedoch das einzelne kaufmännische Und-Zeichen (&)?

Das einzelne kaufmännische Und-Zeichen in einer nicht statischen Member-Funktionsdeklaration zeigt an, dass die Member-Funktion aufgerufen wird, wenn das Objekt eine L-Wert-Referenz ist. Standardmäßig können nicht statische Memberfunktionen sowohl für L-Wert- als auch für R-Wert-Objekte aufgerufen werden. Durch die Angabe von & kann die Funktion jedoch nur L-Werte akzeptieren.

Um den Unterschied zu veranschaulichen:

struct foo
{
   void bar() {}
   void bar1() & {}
   void bar2() && {}
};
  • bar() akzeptiert sowohl L-Werte als auch R-Werte.
  • bar1() erfordert eine L-Wert-Referenz, daher kann es nur für L-Wert-Objekte aufgerufen werden.
  • bar2() erfordert eine R-Wert-Referenz, daher kann sie nur für R-Wert-Objekte aufgerufen werden.

Beispiel:

int main()
{
   foo().bar();  // (always fine)
   foo().bar1(); // doesn't compile because `bar1()` requires an lvalue
   foo().bar2(); // doesn't compile because `bar2()` requires an rvalue

   foo f;
   f.bar();      // (always fine)
   f.bar1();
   f.bar2();     // doesn't compile because `bar2()` requires an rvalue
}

Das obige ist der detaillierte Inhalt vonWas bedeutet das einzelne kaufmännische Und (&) in einer C-Member-Funktionsdeklaration?. 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