Condividi tramite


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.

Vedere anche

Riferimenti

Puntatore this