Corrispondenza di argomenti e puntatore this
Le funzioni membro di classe vengono gestite in modo diverso, a seconda che vengono dichiarate come static o meno. Poiché le funzioni non statiche dispongono di un argomento implicito che specifica il puntatore this, si considera che le funzioni non statiche abbiano un argomento in più rispetto alle funzioni statiche; in caso contrario, vengono dichiarate in modo identico.
Tali funzioni membro non statiche richiedono che il puntatore this corrisponda al tipo di oggetto tramite cui la funzione viene chiamata oppure, per gli operatori di overload, richiedono che il primo argomento corrisponda all'oggetto sul quale viene applicato l'operatore. Per ulteriori informazioni sulla definizione di operatori di overload, vedere Operatori di overload.
A differenza di altri argomenti delle funzioni in overload, non viene introdotto alcun oggetto temporaneo e non viene tentata alcuna conversione quando si tenta di mettere in corrispondenza l'argomento del puntatore this.
Quando l'operatore di selezione dei membri – > viene utilizzato per accedere a una funzione membro, l'argomento del puntatore this è di tipo class-name * const. Se i membri dichiarati come const o volatile, i tipi sono const class-name* const e volatile class-name * const rispettivamente.
L'operatore di selezione dei membri . funziona esattamente nello stesso modo, ad eccezione che un operatore & (address-of) implicito sia anteposto al nome di oggetto. Nell'esempio seguente viene illustrato tale funzionamento:
// Expression encountered in code
obj.name
// How the compiler treats it
(&obj)->name
L'operando sinistro degli operatori .* e –>* (puntatore a membro) vengono considerati nello stesso modo degli operatori –> e . (selezione dei membri) in relazione alla corrispondenza dell'argomento.