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.

Другие вопросы по тегам