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

2021-08-17 00:24:47 字數 902 閱讀 5442

c++裡一切值必須屬於左值、右值兩者之一。

左值:一切變數(包括用const修飾的變數)、物件、包括引用都屬於左值;

右值:一切字面值(可以是巨集),臨時無名物件(函式返回值),表示式(如a+n)。

說明一下:函式返回值,返回的是某乙個型別的值,並不是返回變數。

左值並不是說能放在"="左邊的值就是左值

雖然用const修飾的變數其值不能改變,但是它仍是左值

一、左值引用

首先,引用僅僅是為變數或物件取別名,因此不占用新的記憶體空間,也就不可能構建新物件。

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

const type& 引用名 = 右值表示式

注意事項:

1.左值引用僅僅為變數或物件取別名,必須在定義時賦值,因為只有值或

物件存在時,才有意義為它繫結別名。

2.當左值引用繫結值或物件後,就一直代表這該變數或物件,不能再繫結

其它變數或物件。"從一而終"。

引用陣列:

語法:型別 (&引用名)[陣列中元素數量]=陣列名;
引用指標:

語法:型別 *&引用名=指標名;//可以理解為:(型別*) &引用名=指標名,即將指標的型別當成型別*
二、右值引用

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

注意:1.右值引用同樣需要在定義的時候賦值,和左值引用一樣;但是右值引用

同樣也遵循"從一而終"。

2.右值引用不能繫結左值表示式,但是通常用std::move()將左值強制轉

換成右值,再繫結如:

int a;

int&& r = a;  //編譯失敗

int&& r1 = std::move(a);  //正確

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

2015 06 01 15 07 404人閱讀收藏 舉報 c 11 5 一 c 中的左值和右值 誤區 左值位於等號左邊,右值位於等號右邊。c 11中的定義 左值表示式表示的是乙個物件的身份 在記憶體中的位置 而右值表示式表示的是物件的值 內容 左值和右值都是針對表示式而言的,左值是持久的,右值是短暫...

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

1 左值和右值的概念 左值是可以放在賦值號左邊可以被賦值的值 左值必須要在記憶體中有實體 右值當在賦值號右邊取出值賦給其他變數的值 右值可以在記憶體也可以在cpu暫存器。乙個物件被用作右值時,使用的是它的內容 值 被當作左值時,使用的是它的位址。2 引用 引用是c 語法做的優化,引用的本質還是靠指標...

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

1 左值和右值的概念 左值是可以放在賦值號左邊可以被賦值的值 左值必須要在記憶體中有實體 右值當在賦值號右邊取出值賦給其他變數的值 右值可以在記憶體也可以在cpu暫存器。乙個物件被用作右值時,使用的是它的內容 值 被當作左值時,使用的是它的位址。2 引用 引用是c 語法做的優化,引用的本質還是靠指標...