Beim Deklarieren von Memberfunktionen in C kann es vorkommen, dass nach der Parameterliste die Symbole & und && verwendet werden. Diese als Ref-Qualifizierer bezeichneten Symbole geben den Referenztyp des impliziten Objektparameters an.
Das einzelne kaufmännische Und (&) bedeutet, dass die Mitgliedsfunktion aufgerufen wird wenn das Objekt eine L-Wert-Referenz ist. Eine L-Wert-Referenz bezieht sich auf ein vorhandenes Objekt, das an einem bestimmten Speicherort gespeichert ist. Der folgende Codeausschnitt demonstriert seine Verwendung:
class wrap { public: operator obj() const & { ... } operator obj() && { ... } private: obj data_; };
Die Operatorfunktion obj() mit dem Ref-Qualifizierer & wird aufgerufen, wenn das Objekt eine L-Wert-Referenz ist. Dies bedeutet, dass es sowohl mit L-Wert- als auch mit R-Wert-Ausdrücken aufgerufen werden kann.
Wenn kein Ref-Qualifizierer vorhanden ist, wird der implizite Objektparameter als L-Wert-Referenz behandelt. Dadurch kann die Memberfunktion sowohl mit L-Wert- als auch mit R-Wert-Ausdrücken aufgerufen werden. Der folgende Code veranschaulicht dieses Verhalten:
struct foo { void bar() {} }; int main() { foo().bar(); // (always fine) foo f; f.bar(); // (always fine) }
Der Ref-Qualifizierer && gibt an, dass die Mitgliedsfunktion aufgerufen wird, wenn das Objekt eine R-Wert-Referenz ist. Eine R-Wert-Referenz bezieht sich auf ein temporäres oder durch einen Ausdruck ausgewertetes Objekt, das nicht an einen bestimmten Speicherort gebunden werden kann.
Die folgende Tabelle fasst die Unterschiede zwischen dem einzelnen kaufmännischen Und (&) und zusammen kein kaufmännisches Und:
Ref-Qualifier | Reference Type | Can be Invoked With |
---|---|---|
& | lvalue reference | lvalue and rvalue expressions |
None | lvalue reference | lvalue and rvalue expressions |
Das Verständnis dieser Ref-Qualifizierer ist entscheidend für die korrekte Implementierung von Mitgliedsfunktionen und die Anpassung ihres Verhaltens basierend auf Kontext.
Das obige ist der detaillierte Inhalt vonC-Memberfunktionen: Was bedeuten „&' und „&&' in Parameterlisten?. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!