Was bedeutet ‘return *this’ in C++?

Lesezeit: 1 Minute

Benutzer-Avatar
Kloar

Ich konvertiere ein C++-Programm in C#, aber dieser Teil verwirrt mich. Was bedeutet zurückgeben *das bedeutet?

template< EDemoCommands msgType, typename PB_OBJECT_TYPE >
class CDemoMessagePB : public IDemoMessage, public PB_OBJECT_TYPE
{
    (...)
    virtual ::google::protobuf::Message& GetProtoMsg()  { return *this; }
}

Wie würde es in C# übersetzen?

this bedeutet Zeiger auf das Objekt, also *this ist ein Objekt. Sie geben also ein Objekt zurück, dh *this gibt eine Referenz auf das Objekt zurück.

Achten Sie darauf, wenn Sie versuchen, zu verwenden return *this; auf eine Funktion, deren Rückgabetyp ist Type und nicht Type&, C++ versucht, eine Kopie des Objekts zu erstellen und ruft dann sofort den Destruktor auf, normalerweise nicht das beabsichtigte Verhalten. Der Rückgabetyp sollte also wie in Ihrem Beispiel eine Referenz sein.

  • Ich kann den Destruktor, der hier ein weiteres Mal aufgerufen wird, nicht reproduzieren repl.it/@qaisjp/BusyOutrageousPostscript – vielleicht wegen Renditeoptimierung?

    – qaisjp

    31. Mai 2020 um 18:47 Uhr

Benutzer-Avatar
See

In Ihrem speziellen Fall geben Sie die Referenz auf ‘this’ zurück, da der Rückgabetyp der Funktion eine Referenz (&) ist.

Apropos Größe des zurückgegebenen Speichers, es ist dasselbe wie

virtual ::google::protobuf::Message* GetProtoMsg()  { return this; }

Aber die Verwendung zur Anrufzeit unterscheidet sich.

Zum Zeitpunkt des Aufrufs rufen Sie den Rückgabewert der Funktion auf, indem Sie Folgendes speichern:

Message& m = GetProtoMsg();

  • Es ist nicht “das Gleiche” wie das Zurückgeben eines Zeigers. Es ist irgendwie ähnlich.

    – Juanchopanza

    10. August 2013 um 13:59 Uhr

Mit einem Zeiger können wir direkt auf den Wert zugreifen, der in der Variablen gespeichert ist, auf die er zeigt. Dazu müssen wir dem Bezeichner des Zeigers einfach ein Sternchen voranstellen dereference die als fungiertOperator und das kann wörtlich übersetzt werden in “Wert, auf den gezeigt wird

1652443328 23 Was bedeutet return this in C
Benutzer-Avatar

Josef Pl this Sie geben nur einen Verweis auf das Objekt zurück.

ist ein Zeiger und Sie dereferenzieren ihn. return this; Es wird in C# übersetzt

für den Fall, dass Sie es nicht mit einem Primitiv zu tun haben.
Benutzer-Avatar

bash.d this Wie in C#
ist ein impliziter Zeiger auf das Objekt, das Sie gerade verwenden. & In Ihrem speziellen Fall, da Sie eine Referenz zurückgeben *this zum Objekt müssen Sie verwenden
wenn Sie das Objekt zurückgeben möchten, an dem Sie gerade arbeiten.thisVergessen Sie nicht, dass eine Referenz die Variable selbst oder im Falle eines Zeigers (*this), das Objekt zeigte auf (this), aber nicht der Zeiger (

1012820cookie-checkWas bedeutet ‘return *this’ in C++?

This website is using cookies to improve the user-friendliness. You agree by using the website further.

Privacy policy