что делает код
От: dcb-BanDos Россия  
Дата: 10.01.08 12:20
Оценка:
    const int & abc = 456;
    int & abc2 = const_cast<int&>(abc);
    abc2 = 5654654;
Ничто не ограничивает полет мысли программиста так, как компилятор.
Re: что делает код
От: Анатолий Широков СССР  
Дата: 10.01.08 12:29
Оценка:
Здравствуйте, dcb-BanDos, Вы писали:


DB>
DB>    const int & abc = 456;
DB>    int & abc2 = const_cast<int&>(abc);
DB>    abc2 = 5654654;
DB>


пишет в readonly memory — последствия могут быть любые.
Re: что делает код
От: elcste  
Дата: 10.01.08 12:46
Оценка:
Здравствуйте, dcb-BanDos, Вы писали:

DB>    const int & abc = 456;
DB>    int & abc2 = const_cast<int&>(abc);
DB>    abc2 = 5654654;

Присваивает временному объекту, к которому привязаны ссылки abc и abc2, значение 5654654 (если это значение представимо типом int; либо некоторое определяемое реализацией значение, если не представимо).
Re: что делает код
От: rg45 СССР  
Дата: 10.01.08 12:49
Оценка: +1
Здравствуйте, dcb-BanDos, Вы писали:


DB>
DB>    const int & abc = 456;
DB>    int & abc2 = const_cast<int&>(abc);
DB>    abc2 = 5654654;
DB>


Ведет себя неопределенно (UB)
... << RSDN@Home 1.1.4 stable SR1 rev. 568>>
--
Справедливость выше закона. А человечность выше справедливости.
Re[2]: что делает код
От: Bell Россия  
Дата: 10.01.08 13:07
Оценка: 1 (1)
Здравствуйте, Анатолий Широков, Вы писали:

АШ>Здравствуйте, dcb-BanDos, Вы писали:



DB>>
DB>>    const int & abc = 456;
DB>>    int & abc2 = const_cast<int&>(abc);
DB>>    abc2 = 5654654;
DB>>


АШ>пишет в readonly memory — последствия могут быть любые.


Это если бы было так:
const int abc = 456;


В примере же константная ссылка привязвается к временному объекту.
Любите книгу — источник знаний (с) М.Горький
Re[2]: что делает код
От: FreeBeer  
Дата: 10.01.08 13:09
Оценка:
R>Ведет себя неопределенно (UB)

Ведет он себя определенно, но непредсказуемо...:
Re[2]: что делает код
От: dcb-BanDos Россия  
Дата: 11.01.08 08:38
Оценка:
Здравствуйте, rg45, Вы писали:

R>Здравствуйте, dcb-BanDos, Вы писали:



DB>>
DB>>    const int & abc = 456;
DB>>    int & abc2 = const_cast<int&>(abc);
DB>>    abc2 = 5654654;
DB>>


R>Ведет себя неопределенно (UB)


почему?!
Ничто не ограничивает полет мысли программиста так, как компилятор.
Re[3]: что делает код
От: Kislorod Украина  
Дата: 11.01.08 09:02
Оценка:
DB>почему?!

можно немного у Алёны подсмотреть почему...а от нее дальше ссылки идут.
Re[3]: что делает код
От: rg45 СССР  
Дата: 11.01.08 09:03
Оценка:
Здравствуйте, dcb-BanDos, Вы писали:

DB>Здравствуйте, rg45, Вы писали:


R>>Здравствуйте, dcb-BanDos, Вы писали:



DB>>>
DB>>>    const int & abc = 456;
DB>>>    int & abc2 = const_cast<int&>(abc);
DB>>>    abc2 = 5654654;
DB>>>


R>>Ведет себя неопределенно (UB)


DB>почему?!


Откровенно говоря, твердо ответить затрудняюсь. Так, из общих соображений, даже с учетом того, что объект находится в стеке (опять же, где гарантии?) — взломали константность, выполнили запись...
... << RSDN@Home 1.1.4 stable SR1 rev. 568>>
--
Справедливость выше закона. А человечность выше справедливости.
Re[4]: что делает код
От: Bell Россия  
Дата: 11.01.08 09:39
Оценка: 17 (3)
Здравствуйте, rg45, Вы писали:

R>Откровенно говоря, твердо ответить затрудняюсь. Так, из общих соображений, даже с учетом того, что объект находится в стеке (опять же, где гарантии?) — взломали константность, выполнили запись...


Где находится объект — никто не знает. Известно лишь, что это самый обыкновенный временный объект: Смотри 8.5.3/5, самое окончание:

— Otherwise, a temporary of type “cv1 T1” is created and initialized from the initializer expression
using the rules for a non-reference copy initialization (8.5). The reference is then bound to the temporary.
If T1 is reference-related to T2, cv1 must be the same cv-qualification as, or greater cvqualification
than, cv2; otherwise, the program is ill-formed.
[Example:

const double& rcd2 = 2; // rcd2 refers to temporary with value 2.0
const volatile int cvi = 1;
const int& r = cvi; // error: type qualifiers dropped

—end example]


Поскольку этот временный объект не явялется "настоящей" константой, то использование const_cast с последующей модификацией вполне законно
Любите книгу — источник знаний (с) М.Горький
Re[5]: что делает код
От: Roman Odaisky Украина  
Дата: 11.01.08 18:02
Оценка: 2 (2) :)
Здравствуйте, Bell, Вы писали:

B>Поскольку этот временный объект не явялется "настоящей" константой, то использование const_cast с последующей модификацией вполне законно :xz:


Один хрен по рукам за такое бить, даже если каким-то чудом это и well-defined.
До последнего не верил в пирамиду Лебедева.
Re[6]: что делает код
От: dcb-BanDos Россия  
Дата: 14.01.08 12:07
Оценка:
Здравствуйте, Roman Odaisky, Вы писали:

RO>Здравствуйте, Bell, Вы писали:


B>>Поскольку этот временный объект не явялется "настоящей" константой, то использование const_cast с последующей модификацией вполне законно


RO>Один хрен по рукам за такое бить, даже если каким-то чудом это и well-defined.


да это понятно, вопрос чисто теоретический
Ничто не ограничивает полет мысли программиста так, как компилятор.
 
Подождите ...
Wait...
Пока на собственное сообщение не было ответов, его можно удалить.