Страницы

Поиск по вопросам

понедельник, 15 октября 2018 г.

Почему временный объект нельзя присвоить неконстантной ссылке?

Почему в стандарте языка сказано, что временный объект нельзя присвоить неконстантной ссылке?


Ответ

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

Комментариев нет:

Отправить комментарий