Per qualsiasi puntatore di oggetto valido p
, p[0]
equivale a *p
. Quindi this[0]
equivale a *this
. Non c'è nient'altro. Proprio come è possibile annullare il riferimento a qualsiasi puntatore valido utilizzando [0]
, è possibile annullare il riferimento a this
.
In altre parole, è solo un modo "difficile" per scrivere *this
. Può essere usato per offuscare il codice. Può essere probabilmente usato in alcune circostanze specifiche anche per scopi utili, dal momento che qualsiasi oggetto autonomo può essere pensato come una matrice di dimensione 1. (Da C++ 03, Operatori additivi: "Ai fini di questi operatori, un puntatore a un oggetto nonarray si comporta come un puntatore al primo elemento di una matrice di lunghezza uno con il tipo dell'oggetto come tipo di elemento. ")
PS Come ha osservato Johannes nei commenti, utilizzando le funzionalità di C++ 11 è possibile creare un contesto in cui this
è un puntatore a un tipo incompleto. In tal caso, l'espressione this[0]
non è più valida, mentre l'espressione *this
rimane valida.
Sono abbastanza sicuro che sia ben definito, seguendo le linee di come '& obj + 1' è. – chris
L'ho usato qualche volta con gdb: diciamo che hai fatto p espressione-complesso-che-yield-pointer', ma volevi vedere il contenuto dell'oggetto, non il puntatore, quindi premi su, scrivi '[0] 'e fatto. Non c'è bisogno di scorrere fino all'inizio dell'espressione e aggiungere parentesi (probabilmente). – rodrigo