Форум программистов, компьютерный форум CyberForum.ru

С++ для начинающих

Войти
Регистрация
Восстановить пароль
 
alsav22
5416 / 4812 / 442
Регистрация: 04.06.2011
Сообщений: 13,587
#1

Можно ли использовать явное приведение типов для данных со спецификатором const? - C++

29.11.2011, 16:52. Просмотров 592. Ответов 2
Метки нет (Все метки)

Например:
C++
1
2
3
4
5
6
int n;
const int* ukn = &n;
int s;
int* uks = &s;
const_cast< int* >( ukn ); // или (int*) ukn;
*ukn = *uks; // ошибка при компиляции.
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
29.11.2011, 16:52     Можно ли использовать явное приведение типов для данных со спецификатором const?
Посмотрите здесь:
C++ Явное преобразование типов данных(объясните разницу)!
C++ Найти предельные значения для целочисленных типов. Не использовать заранее определенные константы границ типов.
Несовместимость типов данных: Error:invalid conversion from 'int' to 'const char*' C++
Перегрузить приведение типов для шаблонного класса C++
C++ Явное преобразование типов
static_cast и явное преобразование типов C++
C++ Явное преобразование типов в UST
Деления двух чисел используя явное преобразование типов C++
Создать класс, содержащий поля, которые можно использовать для хранения данных C++
Пишем исключения для каждого типа данных, или можно использовать шаблон? C++
C++ Явное приведение "void*"
Приведение типов C++

Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
Сыроежка
Заблокирован
29.11.2011, 17:21     Можно ли использовать явное приведение типов для данных со спецификатором const? #2
Цитата Сообщение от alsav22 Посмотреть сообщение
Например:
C++
1
2
3
4
5
6
int n;
const int* ukn = &n;
int s;
int* uks = &s;
const_cast< int* >( ukn ); // или (int*) ukn;
*ukn = *uks; // ошибка при компиляции.
Дело в том, что у вас два этих предложения

C++
1
2
const_cast< int* >( ukn ); // или (int*) ukn;
*ukn = *uks; // ошибка при компиляции.
не связаны между собой.
В первом предложении вы получаете временный объект, неконстакнтный указатель, который сразу же удаляется по достижению точки с запятой. С самим указателем ukn при этом ничего не происходит.
Во втором предложении вы пытаетесь изменить значение через константный указатель, и, естественно, вам выдается сообщение об ошибке.

Добавлено через 10 минут
alsav22,

То, чего вы хотите добиться, реализуется следующим образом

C++
1
*const_cast<int *>( ukn ) = *uks;
alsav22
5416 / 4812 / 442
Регистрация: 04.06.2011
Сообщений: 13,587
29.11.2011, 18:06  [ТС]     Можно ли использовать явное приведение типов для данных со спецификатором const? #3
Благодарю!
Ответ Создать тему
Опции темы

КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2017, vBulletin Solutions, Inc.
Рейтинг@Mail.ru