Operador de const_cast
Remove o const, volatile, e __unaligned pelo menos um atributo de uma classe.
const_cast < type-id > ( expression )
Comentários
Um ponteiro para qualquer tipo de objeto ou um ponteiro para um membro de dados pode ser explicitamente convertido para um tipo que é idêntico, exceto o const, volatile, e __unaligned qualificadores.Ponteiros e referências, o resultado fará referência ao objeto original.Ponteiros para os membros de dados, o resultado se referirá ao mesmo membro como ponteiro original (uncast) membro de dados.Dependendo do tipo do objeto referenciado, uma operação de gravação por meio do ponteiro resultante, uma referência ou um ponteiro para o membro de dados pode produzir um comportamento indefinido.
Não é possível usar o const_cast operador para substituir diretamente o status de constante da variável de uma constante.
O const_cast operador converte um valor de ponteiro nulo para o valor de ponteiro nulo do tipo de destino.
Exemplo
// 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();
}
Sobre a linha que contém o const_cast, o tipo de dados da this ponteiro é const CCTest *.O const_cast operador altera o tipo de dados da this o ponteiro para CCTest *, permitindo que o membro number a ser modificado.A projeção dura somente para o restante da instrução em que ele apareça.