const_cast оператор для добавления или удаления cv-квалификаторов
const_cast - оператор приведения типов для добавления или удаления cv-квалификаторов (const или volatile). Другие операторы приведения типов не влияют на квалификаторы const и volatile (reinterpret_cast, static_cast, dynamic_cast). Стоит понимать что снятие снятие квалификатора const с объекта и присваивание ему значения может привести к неопределенному поведению (Undefined Behaviour - UB), такие объекты допустимо только использовать для чтения (например для передачи как параметра в функцию).
#include <iostream>
using namespace std;
void f(int* p) { // Функция выводит значение переменной по переданному указателю
cout << *p << endl;
}
int main(void) {
const int a = 10;
const int* b = &a;
//f(b); // Ошибка! fb() ожидает int*, а не const int*
int* c = const_cast<int*>(b); // Приведение const int* к int*
f(c); //10
// *b = 20; // Ошибка! Переменная b объявлена как константа
// *c = 30; // Неопределенное поведение (Undefined Behavior)
int a1 = 40;
const int* b1 = &a1;
int* c1 = const_cast<int*>(b1);
*c1 = 50; //a1 и c1 ссылаются на один и тот же объект (целое число)
f(&a1); //50
}
2023-10-22
Понравилась страница?
Добавить в закладки
Или поделиться!
Связанные темы
Оператор and альтернатива оператору "Логическое И" && Оператор and_eq - альтернатива оператору &= (Побитовое И) asm ключевое слово С++. Включение блока кода на языке ассемблер в код С++. auto C++, автоматическое вычисление компилятором типа переменной bitand оператор С++ альтернативный "Побитовое И" & bitor оператор языка С++ аналогичный "Побитовому ИЛИ" | bool логический тип данных в С++ break оператор завершения ближайшего цикла или case в С++ case оператор С++ для выполнения блока кода при совпадении целочисленного значения в операторе switch catch оператор С++ для ловли исключений class ключевое слово C++ для задания класса compl оператор C++ альтернативный "Побитовая инверсия" ~ const ключевое слово С++ consteval спецификатор С++20 указывающий что каждый вызов функции должен создавать константы времени компиляции constexpr спецификатор С++11 означающий что значение переменной или результат работы функции должны рассчитываться на этапе компиляции const_cast оператор приведения типов для добавления или удаления cv-квалификаторов С++ dynamic_cast С++ преобразование указателей или ссылок на объект false C++, логическое "Ложно" C++ inline C++ вставка кода функции в месте вызова Ключевые слова в С++ namespace С++ пространство имен noexcept в C++ register С++ зарезервированное ключевое слово return C++ выход из функции с возвратом результата Выражения rvalue, lvalue, gvalue, xvalue, prvalue. throw C++ принудительное выбрасывание исключений true C++ логическое истинно и любое число кроме нуля try C++ начинает блок кода в котором ловятся исключения using C++ создание псевдонимов и импорт из пространства имен volatile С++ запрет оптимизации объекта который может измениться извне