Operador const_cast
Remove os atributos const
, volatile
e __unaligned
de uma classe.
Sintaxe
const_cast <type-id> (expression)
Comentários
Um ponteiro para qualquer tipo de objeto ou um ponteiro para um membro de dados pode ser convertido explicitamente em um tipo idêntico, exceto pelos qualificadores const
, volatile
e __unaligned
. Para ponteiros e referências, o resultado fará referência ao objeto original. Para ponteiros para membros de dados, o resultado fará referência ao mesmo membro que o ponteiro original (não convertido) para o membro de dados. Dependendo do tipo do objeto referenciado, uma operação de gravação pelo ponteiro, referência ou ponteiro para o membro de dados resultante pode gerar comportamento indefinido.
Você não pode usar o operador const_cast
para substituir diretamente o status de constante de uma variáveis constante.
O operador const_cast
converte um valor de ponteiro nulo em 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();
}
Na linha que contém const_cast
, o tipo de dados de ponteiro this
é const CCTest *
. O operador const_cast
altera o tipo de dados do ponteiro this
para CCTest *
, permitindo que o membro number
seja alterado. A conversão só durará pelo restante da instrução em que aparece.
Confira também
Comentários
https://aka.ms/ContentUserFeedback.
Em breve: Ao longo de 2024, eliminaremos os problemas do GitHub como o mecanismo de comentários para conteúdo e o substituiremos por um novo sistema de comentários. Para obter mais informações, consulteEnviar e exibir comentários de