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