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() && {} };
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!