Форум программистов, компьютерный форум, киберфорум
Наши страницы

const_cast для чего и как функционирует - C++

Войти
Регистрация
Восстановить пароль
Другие темы раздела
C++ Скачивание html исходника http://www.cyberforum.ru/cpp-beginners/thread946078.html
Здравствуйте) Хочу попросить помощи в следующем: Есть интернет страница с полем ввода данных (номер) после ввода номера на странице (той же) выдается информация о введенном номере Хочу написать...
C++ NDEBUG и DEBUG зачем нужны константы NDEBUG и DEBUG?? спасибо. http://www.cyberforum.ru/cpp-beginners/thread946056.html
Исходник чата C++
Всем приветик!:) Хочу задать вам один глупый вопросик...:) Есть у кого нибудь исходник какого нибудь чата?:) Что то искала, ничего подходящего не нашла...:( В общем, сейчас попробую описать...
C++ c++ box2d и opencv
Работаю на Xcode с openframework, конкретнее с библиотеками box2d и opencv. Задача захватывать контур с помощью opencv и делать его физическим объектом. Добился того что могу получать точки...
C++ Разработка приложения для symbian на языке c++ http://www.cyberforum.ru/cpp-beginners/thread946033.html
Разработка приложения для symbian на языке c++. Приложение-записная книга с простейшим интерфейсом.Проблема заключается в следующем - если в записи встретится номер телефона, то его можно выделить...
C++ Алгоритм шифрования из exe файла Hola amigos! :) На C++ к слову я мало что понимаю и столкнулся с некой необходимостью получить алгоритм шифрования обычного CD-ключа из exe-файла. Пишу на C# простой установщик игры со всеми... подробнее

Показать сообщение отдельно
fasked
Эксперт С++
4948 / 2528 / 180
Регистрация: 07.10.2009
Сообщений: 4,311
Записей в блоге: 1
30.08.2013, 21:50
const_cast это средство лечения от кривых библиотек (const-incorrect, выражаясь более толерантно). То есть данные могут не изменяться, но const просто не указан. Абстрактный пример в вакууме:
C++
1
2
3
4
5
6
void log(char *msg) { printf("%s: %s\n", __LINE__, msg); }
 
int main() {
    char[] m = "message";
    log(const_cast<char *>(m);
}
Важно отличать, варианты корректного применения и варианты, приводящие к UB.
C++
1
2
3
int i = 10;
const int *ptr = &i;
*(const_cast<int *>(ptr)) = 11;
ptr константен, но указывает на int, который константным не является, следовательно данный случай корректен. Если же применить const_cast к указателю, который указывает на на самом деле константные данные, то уже UB:
C++
1
2
3
const int i = 10;
const int *ptr = &i;
*(const_cast<int *>(ptr)) = 11;
1
 
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2017, vBulletin Solutions, Inc.
Рейтинг@Mail.ru