Я хотел бы проверить свое понимание и выводы по этому вопросу.Правильно ли я говорю, что const_cast, за которым следует модификация ref-to-const, связанная с временным, в порядке?
На IRC, был задан вопрос:
Приемлемо ли
const_cast
const
ссылка, которая связана с временным объектом?
Перевод: он имеет константный реф-к-связанный с временным, и он хочет, чтобы откинуть его const
-ness, чтобы изменить его.
Мой ответ был, что я спросил a similar question ранее, где консенсус, казалось, что сами по себе являются временных сути не const
, и, таким образом, что вы можете сбросила const
-ness для ссылки у вас есть к ним, и изменить их результат. И, пока этот оригинальный ref-to-const
все еще существует, это не повлияет на время жизни временного.
То есть:
int main()
{
const int& x = int(3);
int& y = const_cast<int&>(x);
y = 4;
cout << x;
}
// Output: 4
//^Legal and safe
Я прав?
(Конечно, или нет такой код на самом деле желательно это совсем другое дело!)
@Mark: О, буквально, возможно, был плохим выбором. Я теперь сделал это нелиберальным для этого вопроса. –
Я собирался сказать, что в этом коде не было времен. К счастью, я обновил страницу перед тем, как сделать это :) – Gorpik
afaik (но я не могу найти его в стаддаре), он говорит что-то вроде «когда он был объявлен как const, тогда вы не можете отбросить константу» ... так что вопрос , является литом, объявленным как const? Я так не думаю, так как это приводит к временному объекту, и так объявляется как const? Я понятия не имею, но мои мужества говорят: no – PlasmaHH