Il const_cast è uno dei quattro cast espliciti (o cast stile C++), assieme al dynamic cast, il reinterpret cast e lo static cast. Il const_cast è usato tipicamente nelle situazioni in cui si desidera eliminare l'attributo const o volatile di un particolare tipo di oggetto ed è il solo cast esplicito in grado di effettuare questo tipo di operazione.
Sintassi
[modifica | modifica wikitesto]const_cast<T>(expression)
Il const_cast è, come gli altri cast espliciti, un operatore di tipo template, l'espressione passata come argomento viene valutata e poi convertita nel tipo specificato fra le parentesi angolari.
Esempio di utilizzo
[modifica | modifica wikitesto]class Text {
public:
Text(const char* str);
~Text();
.......
const char& operator[] (std::size_t position) const {
.....
return m_Text[position]];
}
char& operator[] (std::size_t position) {
return const_cast<char&> ( //rimuove l'attributo const dal valore di ritorno
static_cast<const Text&>(*this)[position] //forza l'utilizzo della versione const dell'operatore []
// aggiungendo l'attributo const a this
);
}
};
Questo esempio mostra una classe che implementa due versioni dell'operatore [] per accedere a un particolare carattere di una stringa di testo. La prima implementazione restituisce un riferimento const al carattere contenuto nella posizione specificata come argomento. La seconda versione restituisce nel medesimo modo un riferimento ad un carattere della stringa, sfruttando i cast espliciti const_cast, per modificare il valore di ritorno, e static cast, per forzare l'utilizzo dell'implementazione const dell'operatore sul puntatore this.