Stavo leggendo le risposte a questa domanda C++ pros and cons e ho avuto questo dubbio mentre leggevo i commenti.Perché 'this' è un puntatore e non un riferimento?
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 valuta un char const * (puntatore) (dopo la conversione da matrice a puntatore) - Johannes Schaub - litb 22 dic08 '1:56
Che mostra solo che non usa le stesse convenzioni di altre lingue (successive). - le dorfier 22 dicembre 08 alle 3:35
Definirei la "questa" cosa piuttosto banale. E ops, grazie per aver catturato alcuni errori nei miei esempi di comportamento indefinito. :) Sebbene non capisco quali informazioni sulla dimensione abbiano a che fare con qualcosa nel primo. Un puntatore semplicemente non è autorizzato a puntare all'esterno della memoria allocata - jalf 22 dicembre 08 alle 4:18
È un poeta costante? - yesraaj 22 dicembre 08 alle 6:35
questo può essere costante se il metodo è const int getFoo() const; < - nell'ambito di getFoo, "questo" è costante ed è quindi di sola lettura. Questo impedisce bug e fornisce un certo livello di garanzia al chiamante che l'oggetto non cambierà. - Doug T. 22 dicembre 08 alle 16:42
non è possibile riassegnare "questo". non si può fare "this = &other;", perché questo è un valore. ma questo è di tipo T *, non di tipo T const. è un puntatore non costante. se sei in un metodo const, allora è un puntatore a const. T const. ma il puntatore stesso non è coerente - Johannes Schaub - litb 22 dicembre 08 alle 17:53
pensa a "questo" come questo: #define questo (this_ + 0) dove il compilatore crea "questo_" come puntatore a l'oggetto e rende "questo" una parola chiave. non puoi assegnare "questo" perché (questo_ + 0) è un valore. naturalmente, che non è così che è (non v'è tale macro), ma può aiutare a capire che - Johannes Schaub - litb 22 dicembre '08 al 17:55
La mia domanda è, perché this
è un puntatore di un non è un riferimento? Qualche ragione particolare per renderlo un puntatore?
Alcuni altri argomenti perché this
di essere un punto di riferimento avrebbe senso:
- Considerate
Item 1
daMore Effective C++
: utilizzare i riferimenti quando è garantito che abbiamo un oggetto valido cioè non un NULL (mia interpretazione) . - Inoltre, i riferimenti sono considerati più sicuri dei puntatori (poiché non è possibile svuotare la memoria con un puntatore vagante).
- In terzo luogo, la sintassi per l'accesso ai riferimenti (
.
) è un po 'più bella e più corta dell'accesso ai puntatori (->
o(*)
).
Così la gente può fare brutti hack come void foo :: something() {if (this) stuff(); }} – paulm
@paulm Che cosa potrebbe veramente fare questo "hack"? Non 'questo' valuti sempre 'vero'? – iFreilicht
foo * instance = nullptr; foo-> qualcosa(); // Ora se (this) == false – paulm