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

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程语言 > c/c++ >内容正文

c/c++

c++之左值和右值

發布時間:2023/12/14 c/c++ 28 豆豆
生活随笔 收集整理的這篇文章主要介紹了 c++之左值和右值 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

1,左值和右值
定義:左值與右值這兩概念是從 c 中傳承而來的,在 c 中,左值指的是既能夠出現在等號左邊也能出現在等號右邊的變量(或表達式),換句話說,就是表示內存中可以尋址,可以給它賦值(const類型的變量例外);右值指的則是只能出現在等號右邊的變量(或表達式),表示可以知道它的值(例如常數)。變量地址可讀可寫的是左值,只可讀的是右值。

注意:在 c 語言中,通常來說有名字的變量就是左值,而由運算操作(加減乘除,函數調用返回值等)所產生的中間結果(沒有名字)就是右值。在 c++ 中,每一個表達式都會產生一個左值,或者右值,相應的,該表達式也就被稱作“左值表達式", “右值表達式”。對于基本數據類型來說(primitive types),左值右值的概念和 c 沒有太多不同,不同的地方在于自定義的類型,而且這種不同比較容易讓人混淆:

  • 對于基礎類型,右值是不可被修改的(non-modifiable),也不可被 const, volatile 所修飾(cv-qualitification ignored)
  • 對于自定義的類型(user-defined types),右值卻允許通過它的成員函數進行修改。(c++特有的)
    3)右值不能當成左值使用(但左值可以當成右值使用)。另外值得注意的是,對于前面提到的右值的兩個特性:
    (1) 右值允許調用成員函數。
    (2) 右值只能被 const reference 指向。
    (3) 右值不能當成左值使用,但左值可以當成右值使用
    總結:
    左值:指表達式結束后依然存在的持久對象,可以取地址,具名變量或對象
    右值:表達式結束后就不再存在的臨時對象,不可以取地址,沒有名字。
  • 純右值:***非引用返回的臨時變量( int func(void) )***、運算表達式產生的臨時變量(b+c)、原始字面量(2)、lambda表達式等。
    將亡值:將要被移動的對象、T&&函數返回值、std::move返回值和轉換為T&&的類型的轉換函數的返回值。

    int i = 9; //有一個內存 取個名字叫做i, 存了9 int& r1 = i; //左值引用:r1是i的別名 int&& r = std::move(i); //右值引用: 直接使用9,std::move() 函數,把左值轉成右值 const cs& ref = get_cs(); //右值只能被 const 類型的 reference 所指向

    總結

    以上是生活随笔為你收集整理的c++之左值和右值的全部內容,希望文章能夠幫你解決所遇到的問題。

    如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。