Tipo di puntatore this
Il tipo di puntatore this può essere modificato nella dichiarazione della funzione dalle parole chiave const e volatile. Per dichiarare una funzione con associati gli attributi di una o più di queste parole chiave, aggiungere le parole chiave dopo l'elenco di argomenti della funzione.
Si consideri l'esempio seguente:
// type_of_this_pointer1.cpp
class Point
{
unsigned X() const;
};
int main()
{
}
Nel codice precedente viene dichiarata una funzione membro, X, in cui il puntatore this viene considerato come puntatore const a un oggetto const. È possibile utilizzare combinazioni di opzioni cv-mod-list, ma viene sempre modificato l'oggetto a cui fa riferimento il puntatore this, non il puntatore this stesso. Di conseguenza, la dichiarazione seguente dichiara la funzione X e il puntatore this è un puntatore const a un oggetto const:
// type_of_this_pointer2.cpp
class Point
{
unsigned X() const;
};
int main()
{
}
Il tipo this in una funzione membro è descritto dalla sintassi seguente, dove cv-qualifier-list è determinato dal dichiaratore di funzioni membro e può essere const o volatile (o entrambi) e class-type è il nome della classe:
[cv-qualifier-list] class-type * const this
In altre parole, this è sempre un puntatore di tipo const e non può essere riassegnato. I qualificatori const o volatile utilizzati nella dichiarazione di funzioni membro si applicano all'istanza della classe a cui fa riferimento il puntatore this nell'ambito della funzione.
Nella tabella seguente vengono descritto in modo più dettagliato il funzionamento di tali modificatori.
Semantica dei modificatori this
Modificatore |
Significato |
---|---|
const |
Impossibile modificare i dati dei membri e richiamare funzioni membro non di tipo const. |
volatile |
I dati dei membri vengono caricati dalla memoria tutte le volte in cui si accede alla memoria stessa e determinate ottimizzazioni vengono disabilitate. |
Il passaggio di un oggetto const a una funzione membro non di tipo const provoca un errore. In modo analogo, è un errore anche passare un oggetto volatile a una funzione membro non di tipo volatile.
Le funzioni membro dichiarate come const non possono modificare i dati dei membri (in tali funzioni il puntatore this è un puntatore a un oggetto const).
Nota
Costruttori e distruttori non possono essere dichiarati come const o volatile,ma possono essere richiamati su oggetti di tipo const o volatile.