Оператор const_cast
Удаляет атрибуты const, volatile и __unaligned из класса.
const_cast < type-id > ( expression )
Заметки
Указатель на любой тип объекта или на данные-член можно явно преобразовать в идентичный тип, за исключением квалификаторов const, volatile и __unaligned. Для указателей и ссылок результат будет указывать на исходный объект. Для указателей на данные-члены результат будет указывать на тот же член, что и исходный указатель (uncast) на данные-член. В зависимости от типа объекта, на который осуществляется ссылка, операция записи с помощью результирующего указателя, ссылки или указателя на данные-член может привести к неопределенному поведению.
Оператор const_cast невозможно использовать для непосредственного переопределения постоянного состояния константной переменной.
Оператор const_cast преобразует значение пустого указателя в значение пустого указателя конечного типа.
Пример
// 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();
}
В строке, содержащей оператор const_cast, тип данных указателя this — const CCTest *. Оператор const_cast изменяет тип данных указателя this на CCTest *, разрешая изменение члена number. Приведение выполняется только для оставшейся части оператора, в котором оно указано.