Wann sollte ich den "this" -Zeiger explizit verwenden?
Wann sollte ich explizit schreiben this->member
in eine Methode
eine Klasse?
Kommentar zu dem Problem
Ich bin sicher, das ist ein dupe, aber es ist natürlich unergründlich. Nicht zum ersten mal Wünsche ich der this-Zeiger aufgerufen wurde, selbst!
Nicht nur, dass ich wünschte, es wäre eine Referenz.
Gleiche. 😐 Hier ist der Grund, warum, by the way: research.att.com/~bs/bs_faq2.html - #dieser
Diese Methode offensichtlich nicht funktioniert, wenn die person nicht weiß, die Antwort.
@JohnH.: Hm, sieht aus wie
research.att.com/~bs/
ist jetzt stroustrup.com
. Neuer link: stroustrup.com/bs_faq2.html#this InformationsquelleAutor der Frage Kim | 2009-06-14
Du musst angemeldet sein, um einen Kommentar abzugeben.
In der Regel müssen Sie nicht haben,
this->
impliziert ist.Manchmal, es ist ein name, der Zweideutigkeit, wo es verwendet werden kann, um keine Verwechslungen Klasse Mitgliedern und lokalen Variablen. Allerdings ist hier ein komplett anderer Fall, wo
this->
wird ausdrücklich gefordert.Betrachten Sie den folgenden code:
Wenn du weglassen
this->
, die der compiler nicht wissen, wie zur Behandlung voni
, da es möglicherweise oder möglicherweise nicht vorhanden in allen InstanziierungenA
. Um zu sagen, dass esi
ist in der Tat ein Mitglied derA<T>
für alleT
, diethis->
Präfix ist erforderlich.Hinweis: es ist möglich, noch weglassen
this->
Präfix:InformationsquelleAutor der Antwort ASk
Wenn Sie deklarieren eine lokale variable in einer Methode mit dem gleichen Namen wie eine bereits Mitglied sind, werden Sie haben, um mit dieser->var Zugriff auf die Klasse statt der lokalen Variablen.
Drucke:
5
4
InformationsquelleAutor der Antwort PaV
Es gibt mehrere Gründe, warum Sie möglicherweise verwenden müssen
this
Zeiger explizit.InformationsquelleAutor der Antwort avakar
eine lokale variable
um es ausdrücklich klar, dass Sie
rufen Sie eine Instanz-Methode/variable
Einige coding-standards nutzen-Ansatz (2), da Sie behaupten, es macht den code leichter zu Lesen.
Beispiel:
Übernehmen MyClass hat eine member-variable namens "count'
InformationsquelleAutor der Antwort zebrabox
Einem anderen Fall wird beim Aufruf von Operatoren. E. g. statt
kann man sagen,
Welche vielleicht mehr lesbar. Ein weiteres Beispiel ist die copy-and-swap:
Ich weiß nicht warum es nicht geschrieben
swap(temp)
aber das scheint weitverbreitet zu sein.InformationsquelleAutor der Antwort rlbond
Obwohl ich normalerweise nicht besonders mag, habe ich andere gesehen, die Verwendung dieser-> einfach um Hilfe von intellisense!
InformationsquelleAutor der Antwort Brad Robinson
Es gibt nur wenige Fälle, in denen mit
this
muss verwendet werden, und es gibt andere, bei denen dasthis
Zeiger ist ein Weg, um ein problem zu lösen.1) Alternativen zur Verfügung: Zum auflösen von Mehrdeutigkeit zwischen lokalen Variablen und Klasse Mitglieder, dargestellt durch @ASk.
2) Keine Alternative: zurück, einen Zeiger oder Referenz auf
this
von einer member-Funktion. Dies geschieht Häufig (und getan werden sollte), wenn eine überlastungoperator+
,operator-
,operator=
usw:Dies ermöglicht ein idiom bekannt als "Methode Verkettung", wo Sie mehrere Operationen auf ein Objekt in einer Zeile code. Wie:
Einige halten dies für consise, andere halten es für ein Greuel. Zählen Sie mich in der letzteren Gruppe.
3) Keine Alternative: Zum auflösen von Namen in abhängiger Arten. Dies kommt bei der Verwendung von Vorlagen, wie in diesem Beispiel:
4) Alternativen Verfügbar: Als Teil des coding-Stil zu dokumentieren, welche Variablen sind die Variablen, die im Gegensatz zu lokalen Variablen. Ich bevorzuge ein anderes Namensschema, wo die varibales können niemals den gleichen Namen haben wie die einheimischen. Derzeit bin ich mit
mName
für Mitglieder undname
für die einheimischen.InformationsquelleAutor der Antwort John Dibling
Waren einige Leute darüber reden, wie
this
sollte ein Verweis, und ich konnte nicht mehr Zustimmen. Ich möchte nur sagen, dass eine hässliche Linie der Präprozessor-code simulieren kann, dass:Nicht verwenden 🙂
InformationsquelleAutor der Antwort Enn Michael
Müssen Sie
this
keine Verwechslungen zwischen einem Parameter/lokale Variablen und member-Variablen.InformationsquelleAutor der Antwort Brian R. Bondy
Sie nur haben, um mit dieser-> wenn Sie ein symbol mit dem gleichen Namen in beiden möglichen namespaces. Nehmen Sie zum Beispiel:
Auf die interessantesten Punkte in den code, bezieht sich auf myVar beziehen sich auf das lokale (parameter oder Variablen) myVar. Um Zugriff auf die in der Klasse auch genannt, myVar, müssen Sie explizit "this->".
InformationsquelleAutor der Antwort Joe Schneider
Anderen Gebrauch für dieses (wie ich dachte, wenn ich Lesen Sie die Zusammenfassung und die Hälfte der Frage... .), missachten (schlechte) Benennung Begriffsklärung in anderen Antworten, sind wenn Sie wollen zu werfen, die das aktuelle Objekt haben, binden Sie es in ein function-Objekt, oder verwenden Sie es mit einem Zeiger-auf-member.
Wirft
Bindung
ptr-Mitglied
Hoffe, es hilft, zu zeigen, dass andere Verwendungen von diesem, als nur diese->Mitglied.
InformationsquelleAutor der Antwort Macke
Fand ich eine andere interessante bei expliziter Verwendung der "this" - Zeiger in der effective C++ Buch.
Zum Beispiel, sagen, Sie haben eine const-Funktion wie
Wollen Sie nicht berechnen String-Länge für jeden Anruf, damit Sie Zwischenspeichern möchten, es etwas wie
Aber diese nicht kompiliert wird, ändern Sie das Objekt in eine const-Funktion.
Der trick, um dieses Problem zu lösen erfordert casting diese zu einem non-const diese:
Dann werden Sie in der Lage zu tun, in den oben
InformationsquelleAutor der Antwort Ariel
Dem Haupt - (oder kann ich sagen, das einzige) Zweck der
this
Zeiger ist, dass es auf das Objekt verwendet, um auf eine member-Funktion.Basis auf diesem Zweck, wir haben einige Fälle, die nur mit
this
Zeiger kann das problem lösen.Zum Beispiel, wir müssen zurück, die dem aufrufenden Objekt in eine member-Funktion mit argument ist eine gleichen Klasse Objekt:
InformationsquelleAutor der Antwort Nik