C 左值引用和右值引用

2021-08-08 12:51:26 字數 1180 閱讀 5935

這篇blog主要介紹一下左值和右值的概念及應用陷阱

左值是可以放在賦值號左邊可以被賦值的值;左值必須要在記憶體中有實體

右值當在賦值號右邊取出值賦給其他變數的值;右值可以在記憶體也可以在cpu暫存器

乙個物件被用作右值時,使用的是它的內容(值),被當作左值時,使用的是它的位址。

引用是c++語法做的優化,引用的本質還是靠指標來實現的。引用相當於變數的別名

引用可以改變指標的指向,還可以改變指標所指向的值。

引用的基本規則:

宣告引用的時候必須初始化,且一旦繫結,不可把引用繫結到其他物件;即引用

必須初始化

不能對引用重定義;

對引用的一切操作,就相當於對原物件的操作。

3.1 左值引用

左值引用的基本語法:type &引用名 = 左值表示式;

3.2 右值引用

右值引用的基本語法type &&引用名 = 右值表示式;

右值引用在企業開發人員在**優化方面會經常用到。

右值引用的「&&」中間不可以有空格。

#include using namespace std;

int main()

執行結果:

其實對於左值還是很好理解的,主要是對於右值是不好理解的,特別是**的16行處:右值的例子。c++之所以設計出右值引用的語法,主要是因為對於類似b+1;這樣的運算是發生在cpu暫存器上的,就不能對其取位址、賦值等操作,所以這類運算只能放在等號的右邊,將其賦給其他的變數。若等號右邊出現:&b,這樣的操作是,也是右值,因為取位址符的操作也是在暫存器中完成的。所以不能作為左值。

補充:

#include using namespace std;

C 左值和右值,左值引用和右值引用

c 對於左值和右值沒有標準定義,但是有乙個被廣泛認同的說法 可見立即數,函式返回的值等都是右值 而非匿名物件 包括變數 函式返回的引用,const物件等都是左值。從本質上理解,建立和銷毀由編譯器幕後控制,程式設計師只能確保在本行 有效的,就是右值 包括立即數 而使用者建立的,通過作用域規則可知其生存...

c 左值 右值 右值引用 左值引用

c 裡一切值必須屬於左值 右值兩者之一。左值 一切變數 包括用const修飾的變數 物件 包括引用都屬於左值 右值 一切字面值 可以是巨集 臨時無名物件 函式返回值 表示式 如a n 說明一下 函式返回值,返回的是某乙個型別的值,並不是返回變數。左值並不是說能放在 左邊的值就是左值 雖然用const...

c 左值 右值 左值引用 右值引用

在c語言中,左值認為是賦值語句的左側,右值認為是賦值語句的右側。在c 中,意義稍有不同。c 中,每乙個表示式會產生乙個左值或者右值,相應的,該表示式也就被稱作 左值表示式 右值表示式 乙個左值表示式的求值結果是乙個物件或者是乙個函式。左值可以當右值使用,而右值不能當左值使用。c prime 中這麼簡...