Czytałem odpowiedzi na to pytanie C++ pros and cons i mam wątpliwości podczas czytania komentarzy.Dlaczego "to" jest wskaźnikiem, a nie odniesieniem?
programiści często uważają za mylące, że "to" jest wskaźnikiem, ale nie odniesieniem. innym pomieszaniem jest to, dlaczego "hello" nie jest typu std :: string, ale zwraca wartość char const * (wskaźnik) (po tablicy na konwersję wskaźnika) - Johannes Schaub - litb Dec 22 '08 o 1:56
To pokazuje tylko, że nie używa tych samych konwencji, co inne (późniejsze) języki. - le dorfier Dec 22 '08 o 3:35
Jednak nazwałbym to "rzecz" dość trywialnym problemem. I oops, dzięki za złapanie kilku błędów w moich przykładach niezdefiniowanego zachowania. :) Chociaż nie rozumiem, jakie informacje na temat rozmiaru mają do czynienia z czymkolwiek w pierwszym. Wskaźnik po prostu nie może wskazywać poza przydzieloną pamięcią - jalf Dec 22 '08 o 4:18
Czy to jest stały poiner? - yesraaj Dec 22 '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 pewien poziom gwarancji dla osoby dzwoniącej, że obiekt nie ulegnie zmianie. - Doug T. Dec 22 '08 o 16:42
nie można ponownie przypisać "tego". tzn. nie można wykonać "this = &other;", ponieważ jest to wartość r. ale jest to typ T *, a nie typu T const. to jest niestały wskaźnik. jeśli jesteś w metodzie const, to jest to wskaźnik do const. T const. ale sam wskaźnik jest nonkonstem - Johannes Schaub - litb Dec 22 '08 o 17:53
myśl o "tym" w ten sposób: # zdefiniuj to (this_ + 0) gdzie kompilator tworzy "this_" jako wskaźnik do obiekt i czyni "to" słowo kluczowe. nie można przypisać "this", ponieważ (this_ + 0) jest wartością r. Oczywiście to nie jest, jak to jest (nie ma takiego makro), ale może pomóc zrozumieć - Johannes Schaub - litb Dec 22 '08 na 17:55
moje pytanie, dlaczego this
jest wskaźnik nie odniesienie? Jakiś konkretny powód, dla którego jest to wskaźnik?
Niektóre dalsze argumenty dlaczego this
jest odwołanie miałoby sensu:
- Rozważmy
Item 1
zMore Effective C++
: używać odwołań, gdy zagwarantowane jest, że mamy ważny obiekt nie znaczy NULL (moja interpretacja) . - Ponadto odniesienia są uważane za bezpieczniejsze niż wskaźniki (ponieważ nie możemy wkręcić pamięci za pomocą wskaźnika bezpańskiego).
- Po trzecie, składnia dostępu do referencji (
.
) jest nieco ładniejsza i krótsza niż dostęp do wskaźników (->
lub(*)
).
Więc ludzie mogą robić brzydkie hacki, takie jak void foo :: something() {if (this) stuff(); }} – paulm
@paulm Co właściwie zrobiłby ten "hack"? Czy "to" zawsze nie oznacza "prawda"? – iFreilicht
foo * instance = nullptr; foo-> something(); // Teraz jeśli (this) == false – paulm