c 中的左值與右值問題

2021-10-18 16:22:44 字數 592 閱讀 9727

c++中左值(lvalue)和右值(rvalue)是比較基礎的概念,雖然平常幾乎用不到,但c++11之後變得十分重要,它是理解 move/forward 等新語義的基礎。

左值與右值這兩個概念是從 c 中傳承而來的,左值指既能夠出現在等號左邊,也能出現在等號右邊的變數;右值則是只能出現在等號右邊的變數。

int a; // a 為左值

a = 3; // 3 為右值

左值和右值主要的區別之一是左值可以被修改,而右值不能。

int x = 6; // x是左值,6是右值

int &y = x; // 左值引用,y引用x

int &z1 = x * 6; // 錯誤,x*6是乙個右值

const int &z2 = x * 6; // 正確,可以將乙個const引用繫結到乙個右值

int &&z3 = x * 6; // 正確,右值引用

int &&z4 = x; // 錯誤,x是乙個左值

右值引用和相關的移動語義是c++11標準中引入的最強大的特性之一,通過std::move()可以避免無謂的複製,提高程式效能。

摘錄自知乎

C 中左值與右值

讓我們先看看一些常見的左值和右值舉例 int var 6 var is a lvalue const int var 6 var is a nonmodifiable lvalue char str hello,world str is a nonmodifiable lvalue hello,wo...

C 中左值與右值

讓我們先看看一些常見的左值和右值舉例 int var 6 var is a lvalue const int var 6 var is a nonmodifiable lvalue char str hello,world str is a nonmodifiable lvalue hello,wo...

C 中的左值與右值

1.c 左值與右值概念 變數和文字常量都有儲存區,並且有相關的型別,區別在於變數是可定址的 對於每個變數,都有2個值與其相關聯 1 資料值,儲存在某個記憶體位址中,也稱右值 rvalue 右值是被讀取的值 read value 文字常量和變數都可被用於右值。2 位址值,即儲存資料值的那塊記憶體位址,...