operador const_cast
quita const, volatile, y los atributos de __unaligned de una clase.
const_cast < type-id > ( expression )
Comentarios
Un puntero a cualquier tipo de objeto o un puntero a un miembro de datos se puede convertir explícitamente a un tipo que sea idéntico a excepción de const, de volatile, y los calificadores de __unaligned .Para los punteros y las referencias, el resultado hará referencia al objeto original.Para los punteros a miembros de datos, el resultado hará referencia al mismo miembro que el puntero original (de uncast) al miembro de datos.Dependiendo del tipo de objeto hace referencia, una operación de escritura a través del puntero resultante, la referencia, o el puntero a miembro de datos podrían generar un comportamiento indefinido.
No puede utilizar el operador de const_cast para reemplazar directamente el estado constante de una variable constante.
El operador de const_cast convierte un valor de puntero null al valor del puntero NULL del tipo de destino.
Ejemplo
// expre_const_cast_Operator.cpp
// compile with: /EHsc
#include <iostream>
using namespace std;
class CCTest {
public:
void setNumber( int );
void printNumber() const;
private:
int number;
};
void CCTest::setNumber( int num ) { number = num; }
void CCTest::printNumber() const {
cout << "\nBefore: " << number;
const_cast< CCTest * >( this )->number--;
cout << "\nAfter: " << number;
}
int main() {
CCTest X;
X.setNumber( 8 );
X.printNumber();
}
En la línea que contiene const_cast, el tipo de datos de puntero de this es const CCTest *.El operador de const_cast cambia el tipo de datos de puntero de this a CCTest *, lo que modifican el miembro number .La conversión dura sólo para el resto de la instrucción en la que aparece.