Почему в стандарте языка сказано, что временный объект нельзя присвоить неконстантной ссылке?
Ответ
Вступление: вопросы из разряда «почему так сделали в Стандарте» обычно закрывают на enSO, так как ответить могут только члены из комитета по стандартизации, которые принимали это правило, а они, как правило, не присутствуют на SO, чтобы дать ответ. Но данному вопросу повезло, его закрыли по другой причине (дубликат) и после публикации ответов, один из которых я и заимствую.
Если бы привязка временного объекта была возможна к неконстантной ссылки, могли бы возникать довольно странные ситуации. Например:
void inc(double& x)
{ x += 0.1; }
int i = 0;
inc(i);
Исходно переменная имеет тип int, но приходит в функцию как ссылка на double. Здесь создаётся временный объект, модификация которого внутри функции, реально ни к чему не приводит. Более того, она нелепа, так как осуществляется попытка увеличить целое на 0.1, что, понятно дело, не является возможным.
Комментариев нет:
Отправить комментарий