tutto: questo è citato da Effective C++ 3 ° editiionDomanda su const_cast in C++
const_cast è tipicamente utilizzato per gettare via la costanza degli oggetti. È l'unico cast in stile C++ che può farlo.
La mia domanda è possibile const_cast aggiungere constness a un oggetto non const? In realtà ho scritto un piccolo programma cercando di approvare il mio pensiero.
class ConstTest
{
public:
void test() {
printf("calling non-const version test const function \n");
}
void test() const{
printf("calling const version test const function \n");
}
};
int main(int argc,char* argv){
ConstTest ct;
const ConstTest cct;
cct.test();
const_cast<const ConstTest&>(ct).test();//it is wrong to write this statement without the '&',why
}
Tralasciando l'errore '&' incorre in basso: C2440
errore: 'const_cast': impossibile convertire da 'ConstTest' a 'ConstTest const'
Essa mostra che const_cast può aggiungere la costanza, ma sembra che tu debba lanciare su un riferimento a un oggetto, qual è la magia di questo riferimento?
Perché dovresti usare const_cast per aggiungere const? Assegna l'oggetto non-const a una variabile const e hai finito. Non ho idea del perchè il riferimento const funzioni nel tuo caso però. –
Supponiamo che una funzione membro abbia una sovrascrittura const e non const: come si chiama la sovrascrittura della const su un oggetto non const senza fare una copia?(La risposta è 'static_cast', ma non è immediatamente chiaro al mio perché' const_cast' non dovrebbe funzionare anche per questo) –
@Tyler: si esegue il casting su un riferimento const, ad esempio con 'static_cast'. –