Стандарт С++ 11 и С++ 14 (и рабочий проект, соответственно), например, в §3.10.1:
Значение prvalue ( "чистое" значение r) является значением r, которое не является значением x. [Пример: результат вызова функции чей тип возврата не является ссылкой, является prvalue. Значение литерала, такого как 12, 7.3e5 или true, равно также prvalue. -end пример]
и
Значение r (так называемое, исторически, поскольку rvalues могут появляться в правой части задания выражение) представляет собой значение x, временный объект (12.2) или его подобъект или значение, которое не связано с объектом.
Что приводит меня к вопросу: как выражение может быть "значением, не связанным с объектом"?
У меня создалось впечатление, что целью выражения является возврат объектов или void
(что я тоже не ожидаю, что это значение).
Есть ли простой и общий пример для таких выражений?
Изменить 1
Чтобы еще больше усложнить ситуацию, рассмотрите следующее:
int const& x = 3;
int&& y = 4;
В контексте §8.3.2.5, в котором содержится наиболее интересный фрагмент:
[...] Ссылка должна быть инициализирована для ссылки на действительный объект или функция [...]
Это подкрепляется §8.5.3.1:
Переменная, объявленная как T & или T & &, то есть "ссылка на тип T" (8.3.2), должна быть инициализирована объектом, или функции типа T или объектом, который может быть преобразован в T. [...]