Stavo leggendo le risposte a questa domanda Pro e contro C ++ e ho avuto questo dubbio durante la lettura dei commenti.
i programmatori trovano spesso confuso che "questo" sia un puntatore ma non un riferimento. un'altra confusione è il motivo per cui "ciao" non è di tipo std :: string ma restituisce un carattere const * (puntatore) (dopo la conversione da array a puntatore) - Johannes Schaub - litb 22 dic08 '08 alle 1:56
Ciò dimostra solo che non utilizza le stesse convenzioni di altre lingue (successive). - Le Dorfier, 22 dicembre 2008 alle 3:35
Definirei "questa" cosa un problema piuttosto banale. E oops, grazie per aver rilevato alcuni errori nei miei esempi di comportamento indefinito. :) Anche se non capisco quali informazioni sulla dimensione hanno a che fare con qualcosa nel primo. Semplicemente, a un puntatore non è consentito puntare fuori dalla memoria allocata - jalf 22 dic08 alle 4:18
È un costante poiner? - yesraaj, 22 dicembre 2008 alle 6:35
questo può essere costante se il metodo è const int getFoo () const; <- nell'ambito di getFoo, "this" è costante ed è quindi di sola lettura. Ciò previene i bug e fornisce al chiamante un certo livello di garanzia che l'oggetto non cambierà. - Doug T., 22 dicembre 2008 alle 16:42
non puoi riassegnare "questo". cioè non puoi fare "this = & other;", perché questo è un valore. ma questo è di tipo T *, non di tipo T const. cioè è un puntatore non costante. se sei in un metodo const, allora è un puntatore a const. T const. ma l'indicatore stesso è nonconst - Johannes Schaub - litb 22 dic08 alle 17:53
pensa a "questo" in questo modo: #definisci questo (this_ + 0) dove il compilatore crea "this_" come un puntatore all'oggetto e rende "this" una parola chiave. non puoi assegnare "questo" perché (this_ + 0) è un valore. ovviamente non è così (non esiste una tale macro), ma può aiutare a capirlo - Johannes Schaub - litb 22 dic0808 alle 17:55
La mia domanda è: perché this
un puntatore non è un riferimento? Qualche motivo particolare per renderlo un puntatore?
Alcuni ulteriori argomenti sul perché this
essere un riferimento avrebbe senso:
- Considera
Item 1
daMore Effective C++
: usa i riferimenti quando è garantito che abbiamo un oggetto valido, cioè non un NULL (la mia interpretazione). - Inoltre, i riferimenti sono considerati più sicuri dei puntatori (perché non possiamo rovinare la memoria con un puntatore vagante).
- In terzo luogo, la sintassi per l'accesso ai riferimenti (
.
) è un po 'più bella e più breve dell'accesso ai puntatori (->
o(*)
).
_AFXWIN_INLINE HWND CWnd::GetSafeHwnd() const { return this == NULL ? NULL : m_hWnd; }
this
valuta sempretrue
?