C++11 преобразование lvalue в rvalue?
Я думаю, что упускаю что-то базовое в отношении стандартного преобразования lvalue-в-значение.
Из C++11 4.1:
Glvalue нефункционального типа, не являющегося массивом T, может быть преобразовано в prvalue
Итак, мы объявляем переменную x
:
int x = 42;
Выражение x
в этой области теперь lvalue (так же glvalue). Он удовлетворяет требованиям в 4.1 для преобразования lvalue в rvalue.
Что является типичным примером контекста, в котором преобразование lvalue-в-значение применяется к выражению x
?
1 ответ
Prvalue ("чистое" rvalue) - это выражение, которое идентифицирует временный объект (или его подобъект) или является значением, не связанным с каким-либо объектом.
struct Bar
{
int foo()
{
int x = 42;
return x; // x is converted to prvalue
}
};
выражение bar.foo()
это prvalue.
ИЛИ ЖЕ
Лямбда-выражения, такие как
[](int x){return x*x;}
§ 3.10.1
Prvalue ("чистое" rvalue) - это rvalue, которое не является xvalue. [Пример: результат вызова функции, тип возвращаемой которой не является ссылкой, является предварительным значением. Значение литерала, такого как 12, 7.3e5 или true, также является prvalue. - конец примера]
см. n3055.