Ich habe die Antworten auf diese Frage C ++ Vor- und Nachteile gelesen und diesen Zweifel beim Lesen der Kommentare bekommen.
Programmierer finden es häufig verwirrend, dass "dies" ein Zeiger, aber keine Referenz ist. Eine weitere Verwirrung ist, warum "Hallo" nicht vom Typ std :: string ist, sondern als char const * (Zeiger) (nach der Konvertierung von Array zu Zeiger) ausgewertet wird - Johannes Schaub - litb 22. Dezember 08 um 1:56
Das zeigt nur, dass es nicht die gleichen Konventionen wie andere (spätere) Sprachen verwendet. - Le Dorfier 22. Dezember 08 um 3:35
Ich würde das "dieses" Ding allerdings als ziemlich triviales Thema bezeichnen. Und hoppla, danke, dass Sie einige Fehler in meinen Beispielen für undefiniertes Verhalten entdeckt haben. :) Obwohl ich nicht verstehe, welche Informationen über die Größe mit irgendetwas im ersten zu tun haben. Ein Zeiger darf einfach nicht außerhalb des zugewiesenen Speichers zeigen - Jalf 22. Dezember 08 um 4:18 Uhr
Ist das ein konstanter Zeiger? - Yesraaj 22. Dezember 08 um 6:35 Uhr
Dies kann konstant sein, wenn die Methode const int getFoo () const ist. <- Im Bereich von getFoo ist "this" konstant und daher schreibgeschützt. Dies verhindert Fehler und bietet dem Aufrufer eine gewisse Garantie dafür, dass sich das Objekt nicht ändert. - Doug T. 22. Dezember 08 um 16:42 Uhr
Sie können "dies" nicht neu zuweisen. Das heißt, Sie können "this = & other;" nicht ausführen, da dies ein Wert ist. Dies ist jedoch vom Typ T *, nicht vom Typ T const. dh es ist ein nicht konstanter Zeiger. Wenn Sie sich in einer const-Methode befinden, ist dies ein Zeiger auf const. T const. aber der Zeiger selbst ist nicht konstant - Johannes Schaub - litb 22. Dezember 08 um 17:53
Stellen Sie sich "this" folgendermaßen vor: #define this (this_ + 0), wobei der Compiler "this_" als Zeiger auf das Objekt erstellt und "this" zu einem Schlüsselwort macht. Sie können "dies" nicht zuweisen, da (this_ + 0) ein r-Wert ist. Natürlich ist das nicht so (es gibt kein solches Makro), aber es kann helfen, es zu verstehen - Johannes Schaub - litb 22. Dezember 08 um 17:55
Meine Frage ist, warum this
ein Zeiger keine Referenz ist. Gibt es einen bestimmten Grund, es zu einem Zeiger zu machen?
Einige weitere Argumente, warum this
es sinnvoll wäre, eine Referenz zu sein:
- Beachten Sie
Item 1
ausMore Effective C++
: Verwenden Sie Referenzen, wenn garantiert ist, dass wir ein gültiges Objekt haben, dh kein NULL (meine Interpretation). - Darüber hinaus gelten Referenzen als sicherer als Zeiger (da wir den Speicher nicht mit einem streunenden Zeiger vermasseln können).
- Drittens ist die Syntax für den Zugriff auf referenzen (
.
) etwas besser und kürzer als für den Zugriff auf Zeiger (->
oder(*)
).
_AFXWIN_INLINE HWND CWnd::GetSafeHwnd() const { return this == NULL ? NULL : m_hWnd; }
this
immer bewertettrue
?