Czytałem odpowiedzi na to pytanie za i przeciw C ++ i miałem wątpliwości podczas czytania komentarzy.
programiści często uważają za mylące, że „to” jest wskaźnikiem, ale nie odniesieniem. Kolejnym nieporozumieniem jest to, dlaczego „hello” nie jest typu std :: string, ale przekształca się w char const * (wskaźnik) (po konwersji tablicy na wskaźnik) - Johannes Schaub - litb 22 grudnia 2008 o 1:56
To pokazuje tylko, że nie używa tych samych konwencji, co inne (późniejsze) języki. - le dorfier 22 grudnia 08 o 3:35
Nazwałbym to „tym” dość trywialnym problemem. I ups, dzięki za złapanie kilku błędów w moich przykładach niezdefiniowanego zachowania. :) Chociaż nie rozumiem, co informacje o rozmiarze mają wspólnego z czymkolwiek w pierwszym. Wskaźnik po prostu nie może wskazywać poza przydzieloną pamięć - czerwiec 22 '08 o 4:18
Czy to jest stały poiner? - yesraaj, 22 grudnia 08 o 6:35
może to być stałe, jeśli metoda jest const int getFoo () const; <- w zakresie getFoo „to” jest stałe i dlatego jest tylko do odczytu. Zapobiega to błędom i zapewnia pewną gwarancję dzwoniącemu, że obiekt się nie zmieni. - Doug T., 22 grudnia08 o 16:42
nie można ponownie przypisać „tego”. tzn. nie możesz zrobić „this = & other;”, ponieważ jest to wartość. ale to jest typu T *, a nie typu T const. tzn. jest to niestały wskaźnik. jeśli używasz metody const, to jest to wskaźnik do const. T const. ale sam wskaźnik jest niekonsekwentny - Johannes Schaub - litb 22 grudnia 08 o 17:53
pomyśl o „tym” w ten sposób: # zdefiniuj to (this_ + 0), w którym kompilator tworzy „this_” jako wskaźnik do obiektu i czyni z tego słowa kluczowego. nie możesz przypisać „tego”, ponieważ (this_ + 0) to wartość. oczywiście tak nie jest (nie ma takiego makra), ale może pomóc to zrozumieć - Johannes Schaub - litb 22 grudnia 08 17:55
Moje pytanie brzmi: dlaczego this
wskaźnik nie jest odnośnikiem? Czy jest jakiś konkretny powód, aby uczynić go wskaźnikiem?
Kolejne argumenty, dlaczego this
bycie referencją ma sens:
- Rozważmy
Item 1
zMore Effective C++
: stosowania odniesień, gdy jest zagwarantowane, że mamy ważny obiekt IE nie NULL (moja interpretacja). - Co więcej, odniesienia są uważane za bezpieczniejsze niż wskaźniki (ponieważ nie możemy zepsuć pamięci za pomocą bezpańskiego wskaźnika).
- Po trzecie, składnia dostępu do referencji (
.
) jest nieco ładniejsza i krótsza niż dostęp do wskaźników (->
lub(*)
).
_AFXWIN_INLINE HWND CWnd::GetSafeHwnd() const { return this == NULL ? NULL : m_hWnd; }
this
zawsze ocenia siętrue
?