2013-07-14 2 views
1

Я думаю, что я пропускаю что-то основное относительно стандартного преобразования lvalue-to-rvalue.C++ 11 преобразование lvalue-to-rvalue?

От C++ 11 4.1:

glvalue из не-функции, не массив типа Т может быть преобразован в prvalue

Таким образом, мы объявить переменную x:

int x = 42; 

Выражение x в этой области теперь имеет значение lvalue (также и значение glvalue). Он удовлетворяет требованиям 4.1 для преобразования lvalue-to-rvalue.

Каков типичный пример контекста, в котором преобразование lvalue-rvalue применяется к выражению x?

ответ

1

Prvalue ("pure" 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. -end пример]

см. n3055.

+0

-1 Вы цитируете, что 'func()' является значением rvalue. –

+0

@ JohannesSchaub-litb Я говорю, что «результатом вызова функции, тип возврата которой не является ссылкой, является prvalue». – billz

+0

эквивалент @billz (пожалуйста, замените rvalue в вышеприведенном комментарии на prvalue. Авария). вы не вызываете функцию в своем коде. –

Смежные вопросы