一、左值與右值定義
左值與右值這兩概念是從 c 中傳承而來的,在 c 中,左值指的是既能夠出現在等號左邊也能出現在等號右邊的變數(或表示式),右值指的則是只能出現在等號右邊的變數(或表示式).
在 c 語言中,通常來說有名字的變數就是左值(如上面例子中的 a, b),而由運算操作(加減乘除,函式呼叫返回值等)所產生的中間結果(沒有名字)就是右值,如上的 3 + 4, a + b 等。我們暫且可以認為:左值就是在程式中能夠尋值的東西,右值就是沒法取到它的位址的東西(不完全準確)
二、左值引用與右值引用(引用即別名)
int i=0;
//簡單的賦值語句
int&j=i;
//正確,左值引用
((i>0)
? i : j)=1
;//右值也可以出現在賦值表示式的左邊,
//但是不能作為賦值的物件,因為右值只在當前語句有效,賦值沒有意義。
int&k=10;
//錯誤,左值引用只能引用左值表示式,10是常量-右值
const
int&l=10;
//正確,特殊。。左值引用常量
int&&m=i+5;
//正確,右值引用
int&&n=m;
//錯誤,m是乙個右值引用變數,是個左值
int &&a=1;和const int &a=1;是完全一樣的操作,先在資料區開闢乙個值為1的無名整型量,再將引用a與這個整型量進行繫結。但是右值引用直接支援rebind.
c 11之左值引用和右值引用
c 11中增加了右值引用和move語義來避免一些不必要的構造和copy操作,以此來提公升程式的執行效率。首先說左值和右值,他們絕不是簡單的等號左邊和右邊的區別,總結來說 1 左值可以定址,而右值不可以。2 左值可以被賦值,右值不可以被賦值,可以用來給左值賦值。3 左值可變,右值可變 僅對基礎型別適用...
C C 筆記 之左值引用和右值引用
1 左值和右值的概念 左值是可以放在賦值號左邊可以被賦值的值 左值必須要在記憶體中有實體 右值當在賦值號右邊取出值賦給其他變數的值 右值可以在記憶體也可以在cpu暫存器。乙個物件被用作右值時,使用的是它的內容 值 被當作左值時,使用的是它的位址。2 引用 引用是c 語法做的優化,引用的本質還是靠指標...
C 左值和右值,左值引用和右值引用
c 對於左值和右值沒有標準定義,但是有乙個被廣泛認同的說法 可見立即數,函式返回的值等都是右值 而非匿名物件 包括變數 函式返回的引用,const物件等都是左值。從本質上理解,建立和銷毀由編譯器幕後控制,程式設計師只能確保在本行 有效的,就是右值 包括立即數 而使用者建立的,通過作用域規則可知其生存...