Оператор const_cast
Оператор const_cast используется для снятия
или добавления квалификатора const (а также
volatile) у указателя или ссылки. В качестве
параметра оператор принимает выражение, у которого
нужно изменить константность. Это единственное
преобразование из четырех явных приведений C++,
которое способно убрать константность.
Снимать константность следует только в том случае,
если объект изначально не был объявлен как const.
Изменение по-настоящему константного объекта через
const_cast приводит к неопределенному поведению.
Синтаксис
const_cast<type>(expression)
Пример
Давайте снимем константность с указателя и изменим значение объекта, который изначально не был константным:
#include <iostream>
using namespace std;
int main()
{
int a = 1;
const int* p = &a;
int* q = const_cast<int*>(p);
*q = 2;
cout << a << endl;
return 0;
}
Результат выполнения кода:
2
Пример
Давайте снимем константность со ссылки и изменим значение через эту ссылку:
#include <iostream>
using namespace std;
int main()
{
int a = 1;
const int& ref = a;
int& r = const_cast<int&>(ref);
r = 2;
cout << a << endl;
return 0;
}
Результат выполнения кода:
2
Пример
Давайте добавим константность указателю с помощью
const_cast:
#include <iostream>
using namespace std;
int main()
{
int a = 1;
int* p = &a;
const int* q = const_cast<const int*>(p);
cout << *q << endl;
return 0;
}
Результат выполнения кода:
1
Смотрите также
-
оператор
static_cast,
который выполняет приведение на этапе компиляции -
оператор
dynamic_cast,
который выполняет безопасное приведение полиморфных типов -
оператор
reinterpret_cast,
который переинтерпретирует биты объекта -
оператор
c-cast,
который выполняет приведение в стиле языка C