Je lisais les réponses à cette question pour et contre C ++ et j'ai eu ce doute en lisant les commentaires.
les programmeurs trouvent souvent déroutant que «ceci» soit un pointeur mais pas une référence. une autre confusion est la raison pour laquelle "hello" n'est pas de type std :: string mais s'évalue en un char const * (pointeur) (après la conversion d'un tableau en pointeur) - Johannes Schaub - litb 22 décembre 08 à 1:56
Cela montre seulement qu'il n'utilise pas les mêmes conventions que les autres langages (plus récents). - le dorfier 22 décembre 08 à 3:35
J'appellerais la chose "ceci" une question assez triviale cependant. Et oups, merci d'avoir détecté quelques erreurs dans mes exemples de comportement indéfini. :) Bien que je ne comprenne pas ce que les informations sur la taille ont à voir avec quoi que ce soit dans le premier. Un pointeur n'est tout simplement pas autorisé à pointer en dehors de la mémoire allouée - jalf 22 décembre 08 à 4:18
Est-ce un pointeur constant? - yesraaj 22 décembre 08 à 6:35
cela peut être constant si la méthode est const int getFoo () const; <- dans la portée de getFoo, "this" est constant, et donc en lecture seule. Cela évite les bogues et fournit un certain niveau de garantie à l'appelant que l'objet ne changera pas. - Doug T.Décembre 22 08 à 16:42
vous ne pouvez pas réaffecter «ceci». c'est-à-dire que vous ne pouvez pas faire "this = & other;", car c'est une rvalue. mais celui-ci est de type T *, pas de type T const. c'est-à-dire que c'est un pointeur non constant. si vous êtes dans une méthode const, alors c'est un pointeur vers const. T const. mais le pointeur lui-même est nonconst - Johannes Schaub - litb 22 décembre 08 à 17:53
pensez à "ceci" comme ceci: # définissez ceci (this_ + 0) où le compilateur crée "this_" comme pointeur vers l'objet et fait de "this" un mot-clé. vous ne pouvez pas attribuer "this" car (this_ + 0) est une rvalue. bien sûr, ce n'est pas comme ça (il n'y a pas de telle macro), mais cela peut aider à le comprendre - Johannes Schaub - litb 22 décembre 08 à 17:55
Ma question est la suivante: pourquoi this
un pointeur n'est-il pas une référence? Une raison particulière pour en faire un pointeur?
Quelques autres arguments pour lesquels this
être une référence aurait du sens:
- Considérez à
Item 1
partir deMore Effective C++
: utilisez des références quand il est garanti que nous avons un objet valide ie pas un NULL (mon interprétation). - De plus, les références sont considérées comme plus sûres que les pointeurs (car nous ne pouvons pas visser la mémoire avec un pointeur errant).
- Troisièmement, la syntaxe pour accéder aux références (
.
) est un peu plus agréable et plus courte que pour accéder aux pointeurs (->
ou(*)
).
_AFXWIN_INLINE HWND CWnd::GetSafeHwnd() const { return this == NULL ? NULL : m_hWnd; }
this
toujourstrue
?