Здравствуйте, гость ( Вход | Регистрация )
|
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: Посоветуйте какую-нибудь легкодоступную для понимая книжечку по азам С++, если можно. Книги читать не люблю, но, так понимаю, без них никак. Заранее благодарен. |
|
|
|
![]() |
|
Iron Bug |
24.9.2011, 14:55
Сообщение
#2
|
![]() Профессионал ![]() ![]() ![]() ![]() ![]() Группа: Модератор Сообщений: 1611 Регистрация: 6.2.2009 Из: Yekaterinburg Пользователь №: 533 Спасибо сказали: 219 раз(а) Репутация: 12
|
Цитата(Гость_D_* @ 24.9.2011, 15:36) Link она помещается в специального рода память на самом деле, она помещается в сегмент кода. а попытки изменения в этом сегменте всегда вызывают access violation. |
|
|
|
AXELman4ever Когда применять const_cast 24.9.2011, 2:20
Алексей1153 мдя, что курим ?
const int i = 5;
int *ptr = ... 24.9.2011, 9:58
BRE Цитата(Алексей1153 @ 24.9.2011, 10:58) но... 24.9.2011, 10:35
Влад Компилятор GCC 4.5
#include <iostream>
usi... 24.9.2011, 11:29
D Цитата(Влад @ 24.9.2011, 11:29) Компилято... 24.9.2011, 12:36
D Вот вам ответ, почему так происходит
Код:
int mai... 24.9.2011, 12:41
Алексей1153 ЦитатаТак же как и пользоваться сишным приведением... 24.9.2011, 16:01
AXELman4ever В очередной раз благодарю всех отписавшихся. За 1 ... 24.9.2011, 17:52![]() ![]() ![]() |
|
Текстовая версия | Сейчас: 24.12.2025, 15:29 |