crossplatform.ru

Здравствуйте, гость ( Вход | Регистрация )

> Когда применять const_cast
AXELman4ever
  опции профиля:
сообщение 24.9.2011, 2:20
Сообщение #1


Студент
*

Группа: Участник
Сообщений: 31
Регистрация: 22.9.2011
Пользователь №: 2902

Спасибо сказали: 0 раз(а)




Репутация:   0  


Всем добрый!

Пытаюсь понять принцип работы const_cast. Для интереса про-инициализировал значение (int) переменной в стеке, вместо того, чтобы создать на него указатель. После чего, загнал ссылку переменной и решил привести к типу pointer на int, дабы снять с переменной константность:

const int i = 5;
int *ptr = const_cast <int*> (&i);


после чего решил инкрементировать значение по указателю и проверить, изменилось ли значение константной переменной.
Для уверенности и сравнения обеих значений вызвал адрес на который ссылается указатель, и адрес ссылки.

И вот чему я был удивлен. Адрес, который хранит указатель и адрес ссылки - одинаковы, но значения у них разные:

qDebug() << "*ptr: "<< ptr << "-" << *ptr; // *ptr: 0x28ff10 - 6
qDebug() << "&i: "<< &i << "-" << i; // &i : 0x28ff10 - 5

Объясните пожалуйста, как так происходит? и почему const_cast нельзя вызвать для константных типов значений?

PS: Посоветуйте какую-нибудь легкодоступную для понимая книжечку по азам С++, если можно. Книги читать не люблю, но, так понимаю, без них никак. Заранее благодарен.

Перейти в начало страницы
 
Быстрая цитата+Цитировать сообщение

Сообщений в этой теме


Быстрый ответОтветить в данную темуНачать новую тему
Теги
Нет тегов для показа


3 чел. читают эту тему (гостей: 3, скрытых пользователей: 0)
Пользователей: 0




RSS Текстовая версия Сейчас: 26.11.2024, 12:30