2013-07-14 48 views
1

我想我缺少一些基本的左值到右值標準轉換。C++ 11左值到右值的轉換?

從C++ 11 4.1:

非功能的glvalue,非陣列類型T可以被轉換爲一個prvalue

所以我們聲明一個變量x

int x = 42; 

在這個範圍內的表達式x現在是一個左值(所以也是一個glvalue)。它滿足4.1中對左值到右值轉換的要求。

上下文中將左值到右值轉換應用於表達式x的典型示例是什麼?

回答

1

prvalue(「純」右值)是標識臨時對象(或其子對象)的表達式,或者是與任何對象無關的值。

struct Bar 
{ 
    int foo() 
    { 
     int x = 42; 
     return x; // x is converted to prvalue 
    } 
}; 

表達bar.foo()prvalue

OR

Lambda表達式,如

[](int x){return x*x;} 

§3.10.1

甲prvalue(「純」右值)是一個rvalue這不是一個x值。 [例如:調用返回類型不是引用的函數的結果是一個前值。諸如12,7.3e5或true這樣的字面值也是一個值。 - 示例]

請參閱n3055

+0

-1,你引用'func()'是一個右值。 –

+0

@ JohannesSchaub-litb我在說「調用返回類型不是引用的函數的結果是一個前值」。 – billz

+0

@billz等價物(請在我的上述評論中用prvalue。accident替換rvalue)。你沒有在代碼中調用函數。 –