c++之左值和右值
1,左值和右值
定義:左值與右值這兩概念是從 c 中傳承而來的,在 c 中,左值指的是既能夠出現在等號左邊也能出現在等號右邊的變量(或表達式),換句話說,就是表示內存中可以尋址,可以給它賦值(const類型的變量例外);右值指的則是只能出現在等號右邊的變量(或表達式),表示可以知道它的值(例如常數)。變量地址可讀可寫的是左值,只可讀的是右值。
注意:在 c 語言中,通常來說有名字的變量就是左值,而由運算操作(加減乘除,函數調用返回值等)所產生的中間結果(沒有名字)就是右值。在 c++ 中,每一個表達式都會產生一個左值,或者右值,相應的,該表達式也就被稱作“左值表達式", “右值表達式”。對于基本數據類型來說(primitive types),左值右值的概念和 c 沒有太多不同,不同的地方在于自定義的類型,而且這種不同比較容易讓人混淆:
3)右值不能當成左值使用(但左值可以當成右值使用)。另外值得注意的是,對于前面提到的右值的兩個特性:
(1) 右值允許調用成員函數。
(2) 右值只能被 const reference 指向。
(3) 右值不能當成左值使用,但左值可以當成右值使用
總結:
左值:指表達式結束后依然存在的持久對象,可以取地址,具名變量或對象
右值:表達式結束后就不再存在的臨時對象,不可以取地址,沒有名字。
純右值:***非引用返回的臨時變量( int func(void) )***、運算表達式產生的臨時變量(b+c)、原始字面量(2)、lambda表達式等。
將亡值:將要被移動的對象、T&&函數返回值、std::move返回值和轉換為T&&的類型的轉換函數的返回值。
總結
- 上一篇: u盘在计算机磁盘中显示为磁盘1,U盘盘符
- 下一篇: C++之旅