日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當(dāng)前位置: 首頁(yè) > 编程语言 > c/c++ >内容正文

c/c++

【C++grammar】左值、右值和将亡值

發(fā)布時(shí)間:2023/12/1 c/c++ 32 豆豆
生活随笔 收集整理的這篇文章主要介紹了 【C++grammar】左值、右值和将亡值 小編覺得挺不錯(cuò)的,現(xiàn)在分享給大家,幫大家做個(gè)參考.

目錄

    • C++03的左值和右值
    • C++11的左值和右值
    • 將亡值

在C++03中就有相關(guān)的概念

C++03的左值和右值

通俗的理解:

(1) 能放在等號(hào)左邊的是lvalue
(2) 只能放在等號(hào)右邊的是rvalue
(3) lvalue可以作為rvalue使用

對(duì)于第三點(diǎn)可以舉個(gè)例子:
int x ;
x = 6; //x是左值,6是右值
int y ;
y = 6; //y是左值,6是右值
y = x; //x作為右值,所以左值是可以作為右值使用的

C++11對(duì)左值和右值做出了更加詳細(xì)的劃分。

C++11的左值和右值

表達(dá)值分為泛左值、右值;
泛左值分為左值和將亡值(涉及右值引用)
右值可分為純右值和將亡值(涉及右值引用)

左值指定了一個(gè)函數(shù)或者對(duì)象(表達(dá)式計(jì)算得出的結(jié)果),它是一個(gè)可以取地址的表達(dá)式。
也就是說,如果一個(gè)函數(shù)或者對(duì)象可以取地址,那么他就是一個(gè)左值。

int lv1{ 42 }; // Object int main() {int& lv2{ lv1 }; // Lvalue reference to Objectint* lv3{ &lv1 }; // Pointer to Object } int& lv4() { return lv1; } // Function returning Lvalue Reference

左值例子:

(1) 解引用表達(dá)式p
(2) 字符串字面量"abc"
(3) 前置自增/自減表達(dá)式 ++i / --i
(4) 賦值或復(fù)合運(yùn)算符表達(dá)式(x=y或m=n等)

純右值是不和對(duì)象相關(guān)聯(lián)的值(字面量)或者其求值結(jié)果是字面量或者一個(gè)匿名的臨時(shí)對(duì)象.
純右值例子:

(1) 除字符串字面量以外的字面量,比如 32, ‘a(chǎn)’

(2) 返回非引用類型的函數(shù)調(diào)用 int f() { return 1;}

(3) 后置自增/自減表達(dá)式i++/i–

(4) 算術(shù)/邏輯/關(guān)系表達(dá)式(a+b、a&b、a<<b)(a&&b、a||b、~a)(a==b、a>=b、a<b)

(5) 取地址(&x)

如:

72.0f
a–
x為一個(gè)整型變量,&x

左值可以當(dāng)成右值使用

將亡值

將亡值也指定了一個(gè)對(duì)象,是一個(gè)將純右值轉(zhuǎn)換為右值引用的表達(dá)式:
&&這里不是邏輯與運(yùn)算符,而是右值引用

int&& rvr1{ 22 }; // 右值引用可以引用純右值

我們先來看什么是左值引用:
a是個(gè)左值,b是a的引用,為左值引用。

int a = 1; int& b = a;

如果a是個(gè)常量22,我們對(duì)其引用就會(huì)出錯(cuò):
如下:

int& b{22}; //錯(cuò)!非常量左值引用不可引用純右值

為了解決這個(gè)問題,可以使用const 引用(常量左值引用)引用純右值:
這樣就能保證22(純右值)不會(huì)通過b修改,這樣b就相當(dāng)于是22的別名。

const int& b{22};

當(dāng)然還有另一種引用純右值的方法就是右值引用了:
通過右值引用可以使純右值的生存期增加,例如:
int&& rvr1{ 22 }; // 右值引用可以引用純右值
int rv2 =++rv1;
原本22在執(zhí)行完第一個(gè)語(yǔ)句就會(huì)消亡,但是使用右值引用之后,就可以在后面的語(yǔ)句通過調(diào)用右值引用,繼續(xù)使用這個(gè)值了。

總例:

int prv(int x) { return 6 * x; } // pure rvalue int main() {const int& lvr5{ 21 }; // 常量左值引用可引用純右值int& lvr6{ 22 }; // 錯(cuò)!非常量左值引用不可引用純右值int&& rvr1{ 22 }; // 右值引用可以引用純右值int& lvr7{ prv(2) }; // 錯(cuò)!非常量左值引用不可引用純右值int&& rvr2{ prv(2) }; // 右值引用普通函數(shù)返回值rvr1 = ++rvr2; // 右值引用做左值使用}

總結(jié)

以上是生活随笔為你收集整理的【C++grammar】左值、右值和将亡值的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網(wǎng)站內(nèi)容還不錯(cuò),歡迎將生活随笔推薦給好友。