Здравствуйте, 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.0const volatile int cvi = 1;
const int& r = cvi; // error: type qualifiers dropped
—end example]
Поскольку этот временный объект не явялется "настоящей" константой, то использование const_cast с последующей модификацией вполне законно
Здравствуйте, Bell, Вы писали:
B>Поскольку этот временный объект не явялется "настоящей" константой, то использование const_cast с последующей модификацией вполне законно :xz:
Один хрен по рукам за такое бить, даже если каким-то чудом это и well-defined.
DB> const int & abc = 456;
DB> int & abc2 = const_cast<int&>(abc);
DB> abc2 = 5654654;
Присваивает временному объекту, к которому привязаны ссылки abc и abc2, значение 5654654 (если это значение представимо типом int; либо некоторое определяемое реализацией значение, если не представимо).
Здравствуйте, 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>>
--
Справедливость выше закона. А человечность выше справедливости.
Здравствуйте, Roman Odaisky, Вы писали:
RO>Здравствуйте, Bell, Вы писали:
B>>Поскольку этот временный объект не явялется "настоящей" константой, то использование const_cast с последующей модификацией вполне законно
RO>Один хрен по рукам за такое бить, даже если каким-то чудом это и well-defined.
да это понятно, вопрос чисто теоретический
Ничто не ограничивает полет мысли программиста так, как компилятор.