todo: esta es una cita del Efectiva C++ tercera editiionPregunta sobre const_cast en C++
const_cast se suele utilizar para desechar el constness de objetos. Es el único elenco de estilo C++ que puede hacer esto.
Mi pregunta es ¿puede const_cast agregar constness a un objeto no const? En realidad, escribí un pequeño programa tratando de aprobar mi pensamiento.
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
}
Omitiendo el error '&' incurre a continuación: C2440
error: 'const_cast': no se puede convertir de 'ConstTest' a 'ConstTest const'
muestra que const_cast puede agregar constness, pero parece que tienes que lanzar a una referencia de objeto, ¿cuál es la magia de esta referencia?
¿Por qué usaría const_cast para agregar const? Simplemente asigne el objeto no const a una variable const y termine. No tengo idea de por qué la referencia constante funciona en tu caso. –
Supongamos que una función miembro tiene una anulación const y non const: ¿cómo se llama a la anulación const en un objeto no const sin hacer una copia?(La respuesta es 'static_cast', pero no está claro de inmediato por qué' const_cast' tampoco debería funcionar para esto) –
@Tyler: se lanza a una referencia constante, por ejemplo con 'static_cast'. –