Неконстантные ссылки должны быть инициализированы l-значениями. Если бы вы могли инициализировать их с временными файлами, что бы вы сделали?
int& foo = 5;
foo = 6; // ?!
Ссылки
const
имеют специальное свойство, которое продлевает жизнь рефери, и, поскольку они const
, нет никакой возможности попытаться изменить что-то, что не помещается в памяти. Например:
const int& foo = 5;
foo = 6; // not allowed, because foo is const.
Помните, что ссылки на самом деле должны ссылаться на что-то, а не только на временные переменные. Например, допустимо следующее:
int foo = 5;
int& bar = foo;
bar = 6;
assert(foo == 6);