Dla każdego ważnego wskaźnika obiektu p
, p[0]
jest równoważna *p
. Tak więc this[0]
jest odpowiednikiem *this
. Nie ma w tym nic więcej. Podobnie jak możesz usunąć dowolny poprawny wskaźnik za pomocą [0]
, możesz usunąć z nim dereferencję this
.
Innymi słowy, jest to po prostu "podstępny" sposób napisania *this
. Może służyć do zaciemniania kodu. Prawdopodobnie może być również użyty w pewnych szczególnych okolicznościach do użytecznych celów, ponieważ każdy samodzielny obiekt może być traktowany jako tablica o rozmiarze 1. (Od C++ 03, Operatory dodawania: "Dla celów tych operatorów, wskaźnik do obiektu bezbarwnego zachowuje się tak samo jak wskaźnik do pierwszego elementu tablicy o długości jeden z typem obiektu jako typem elementu. ")
PS Jak zauważył Johannes w komentarzach, przy użyciu funkcji C++ 11 można wymyślić kontekst, w którym this
jest wskaźnikiem do niekompletnego typu. W takim przypadku wyrażenie this[0]
staje się nieważne, podczas gdy wyrażenie *this
pozostaje poprawne.
Jestem prawie pewny, że jest dobrze zdefiniowany, idąc wzdłuż linii jak '& obj + 1'. – chris
Używałem tego czasami z gdb: mówisz, że zrobiłeś 'p-wyrażenie-złożone-to-yield-wskazy'', ale chciałeś zobaczyć zawartość obiektu, a nie wskaźnika, więc naciśnij w górę, wpisz' [0] 'i gotowe. Nie trzeba przewijać do początku wyrażenia i dodawać nawiasów (prawdopodobnie). – rodrigo