Стандарт C ++ 11 и C ++ 14 (и рабочий проект соответственно) говорят в §3.10.1:
Prvalue («чистое» rvalue) - это rvalue, не являющееся значением x. [Пример: результатом вызова функции, возвращаемый тип которой не является ссылкой, является prvalue. Значение литерала, такого как 12, 7.3e5 или true, также является prvalue. —Конечный пример]
а также
Rvalue (исторически так называемое, потому что rvalue может появляться в правой части выражения присваивания) - это xvalue, временный объект (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. [...]
42
- это prvalue, не связанное с объектом; оценка42
не создаетint
объект. - person Keith Thompson   schedule 05.09.2014nullptr
,true
,this
и т. Д. Могут быть значениями без объекта, но я не уверен. - person Mooing Duck   schedule 05.09.201442
не создает временный объект. - person gha.st   schedule 05.09.2014T1
» [...] То есть ,int const& x = 3;
создает временный (объект), инициализированный с помощью3
, и связывает этот объект со ссылкой. Изменить: Ах, я только что видел, как вы уже обсуждали это в комментариях к ответу Антона. - person dyp   schedule 05.09.2014