最新国产好看的视频,伊人天堂AV在线,国产Aaaaaa视频,蜜臀视频在线观看一区,人妻av色图,密臀久久久精品影片,青青视频免费观看毛片,久草在线观看视,国产三级精品色情在线

C++?右值引用與?const?關(guān)鍵字詳解

 更新時間:2022年10月08日 08:26:31   作者:木三百川  
C++中的const關(guān)鍵字的用法非常靈活,而使用const將大大改善程序的健壯性,const關(guān)鍵字是一種修飾符,這篇文章主要介紹了C++?右值引用與?const?關(guān)鍵字,需要的朋友可以參考下

C++中的const關(guān)鍵字的用法非常靈活,而使用const將大大改善程序的健壯性,const關(guān)鍵字是一種修飾符。修飾符本身,并不產(chǎn)生任何實際代碼。就 const 修飾符而言,它用來告訴編譯器,被修飾的這些東西,具有只讀的特點。在編譯的過程中,一旦我們的代碼試圖去改變這些東西,編譯器就應(yīng)該給出錯誤提示。

C++11 新增了另一種引用:右值引用(rvalue reference),這種引用可指向右值,是使用 && 聲明的。使用右值引用可以減少復(fù)制操作,延長臨時對象生命周期,提升程序性能。它一般被用來實現(xiàn)移動語義和完美轉(zhuǎn)發(fā),將 const 關(guān)鍵字用于右值引用的場景不多,這里來總結(jié)一下 const 右值引用的特性,對其是否具有實際應(yīng)用價值不做討論。右值引用必須在創(chuàng)建的同時進(jìn)行初始化,且只能使用右值進(jìn)行初始化,可將 const 關(guān)鍵字用于右值引用,如下所示。

C++11 新增了另一種引用:右值引用(rvalue reference),這種引用可指向右值,是使用 && 聲明的。使用右值引用可以減少復(fù)制操作,延長臨時對象生命周期,提升程序性能。它一般被用來實現(xiàn)移動語義和完美轉(zhuǎn)發(fā),將 const 關(guān)鍵字用于右值引用的場景不多,這里來總結(jié)一下 const 右值引用的特性,對其是否具有實際應(yīng)用價值不做討論。右值引用必須在創(chuàng)建的同時進(jìn)行初始化,且只能使用右值進(jìn)行初始化,可將 const 關(guān)鍵字用于右值引用,如下所示:

//聲明并初始化常規(guī)右值引用變量
int && rrx = 55;
 
//將const關(guān)鍵字用于右值引用變量,以下幾種為等效表示
const int && crrx = 55;
int const && crrx = 55;

在 Microsoft Visual Studio 中連續(xù)多個 const 會被編譯器解釋成一個,即 const const const const int &&const int && 等效,除此之外,const int const && 在 Microsoft Visual Studio 中也與 const int && 等效,而 int && const 在 QT minGW 中將會報錯,在 Microsoft Visual Studio 中與 int && 等效。

常規(guī)右值引用與 const 右值引用的特性如下:

  • 類型為 int && 的引用只能用來引用右值,不能用來引用左值,后面可修改其值??蓪㈩愋蜑?int 的非左值(比如字面常量 100、多項表達(dá)式 1+50*2、函數(shù)的 int 返回值)、類型不是 int 但可轉(zhuǎn)換為 int 的非左值(比如多項表達(dá)式 1.0+50.0*2.0、字面常量 100.0、函數(shù)的 double 返回值)在初始化時賦給 rrx。變量初始化完成后,其地址就固定不變,其表現(xiàn)與 int 類型變量一致,右值引用變量自身屬于左值。
  • 類型為 const int && 的引用也只能用來引用右值,不能用來引用左值,但后面不可修改其值??蓪㈩愋蜑?int 的非左值(比如字面常量 100、多項表達(dá)式 1+50*2、函數(shù)的 int 返回值)、類型不是 int 但可轉(zhuǎn)換為 int 的非左值(比如多項表達(dá)式 1.0+50.0*2.0、字面常量 100.0、函數(shù)的 double 返回值)在初始化時賦給 crrx。變量初始化完成后,其地址就固定不變,其表現(xiàn)與 const int 類型變量一致,自身也屬于左值。

常規(guī)右值引用變量的初始化用法如下:

//初始化方式一:字面常量
int && rrx = 100;
int && rrx = 100.0;
 
//初始化方式二:多項表達(dá)式
int && rrx = 1+50*2;
int && rrx = 1.0+50.0*2.0;
 
//初始化方式二:函數(shù)返回值
int && rrx = abs(10);
int && rrx = sqrt(10.0);

右值引用在部分情況下會生成臨時變量(一個典型例子是使用字面常量右值如 100 來初始化右值引用變量),然后將右值引用變量作為該臨時變量的別名,這與 const 左值引用十分相似,但與之不同的是:const 左值引用變量初始化完成后其值就無法被修改(權(quán)限為只讀),右值引用變量初始化完成后其值仍可修改(權(quán)限為可讀可寫)。在另一些情況下,右值引用可以延長已有臨時變量的生命周期,減少復(fù)制操作的次數(shù)(一個典型例子是使用函數(shù)返回的類對象來初始化右值引用變量,在關(guān)閉編譯器優(yōu)化的情況下可以將本需 2 次的復(fù)制操作減少為 1 次)。

const 關(guān)鍵字修飾的右值引用變量初始化用法如下,與常規(guī)右值引用變量的區(qū)別僅在于它們的可修改屬性不同。

//初始化方式一:字面常量
const int && crrx = 100;
const int && crrx = 100.0;
 
//初始化方式二:多項表達(dá)式
const int && crrx = 1+50*2;
const int && crrx = 1.0+50.0*2.0;
 
//初始化方式二:函數(shù)返回值
const int && crrx = abs(10);
const int && crrx = sqrt(10.0);

將初始化時 int &&const int && 可接受的形式列個表,如下,需要注意的是:可以將右值引用變量用于初始化左值引用變量,但不可將左值引用變量用于初始化右值引用變量,因為右值引用變量自身屬于左值。

初始化時可接受的形式int && 類型const int && 類型
int 變量不可以不可以
const int 變量不可以不可以
int & 變量不可以不可以
const int & 變量不可以不可以
int && 變量不可以不可以
const int && 變量不可以不可以
形如 100 的 int 字面常量可以可以
形如 1+50*2 的 int 多項表達(dá)式可以可以
返回類型為 int 的函數(shù)返回值可以可以
形如 100.0 可轉(zhuǎn)換為 int 的字面常量可以可以
形如 1.0+50.0*2.0 可轉(zhuǎn)換為 int 的多項表達(dá)式可以可以

擴(kuò)展const常量與宏定義的常量的區(qū)別:

這個區(qū)別用從幾個角度來說:

 1.const 定義的常數(shù)是變量 也帶類型, #define 定義的只是個常數(shù) 不帶類型。

2. define是在編譯的預(yù)處理階段起作用,而const是在 編譯、運行的時候起作用。

3.define只是簡單的字符串替換,沒有類型檢查。而const有對應(yīng)的數(shù)據(jù)類型,是要進(jìn)行判斷的,可以避免一些低級的錯誤。 
由于define只是簡單的字符串替換會導(dǎo)致邊界效應(yīng),具體舉例可以參考下面代碼:

#define N 2+3 //我們預(yù)想的N值是5,我們這樣使用N
double a = N/2;  //我們預(yù)想的a的值是2.5,可實際上a的值是3.5

4.占用的空間不同

#define PI 3.14 ? ? //預(yù)處理后 占用代碼段空間
const float PI=3.14; ? ?//本質(zhì)上還是一個 float,占用數(shù)據(jù)段空間

5. const常量可以進(jìn)行調(diào)試的,define是不能進(jìn)行調(diào)試的,因為在預(yù)編譯階段就已經(jīng)替換掉了

到此這篇關(guān)于C++ 右值引用與 const 關(guān)鍵字的文章就介紹到這了,更多相關(guān)C++ 右值引用const 關(guān)鍵字內(nèi)容請搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!

相關(guān)文章

  • C++命名空間?缺省參數(shù)?const總結(jié)?引用總結(jié)?內(nèi)聯(lián)函數(shù)?auto關(guān)鍵字詳解

    C++命名空間?缺省參數(shù)?const總結(jié)?引用總結(jié)?內(nèi)聯(lián)函數(shù)?auto關(guān)鍵字詳解

    這篇文章主要介紹了C++命名空間?缺省參數(shù)?const總結(jié)?引用總結(jié)?內(nèi)聯(lián)函數(shù)?auto關(guān)鍵字詳解的相關(guān)資料,需要的朋友可以參考下
    2023-01-01
  • Qt實現(xiàn)計算器功能

    Qt實現(xiàn)計算器功能

    這篇文章主要為大家詳細(xì)介紹了Qt實現(xiàn)計算器功能,文中示例代碼介紹的非常詳細(xì),具有一定的參考價值,感興趣的小伙伴們可以參考一下
    2022-08-08
  • C語言利用UDP實現(xiàn)群聊聊天室的示例代碼

    C語言利用UDP實現(xiàn)群聊聊天室的示例代碼

    UDP是一個輕量級、不可靠、面向數(shù)據(jù)報的、無連接的傳輸層協(xié)議,多用于可靠性要求不嚴(yán)格,不是非常重要的傳輸,如直播、視頻會議等等。本文將利用UDP實現(xiàn)簡單的群聊聊天室,感興趣的可以了解一下
    2022-08-08
  • C語言超細(xì)致講解循環(huán)語句

    C語言超細(xì)致講解循環(huán)語句

    我們說到當(dāng)滿足特定條件時,就會執(zhí)行if語句或者switch語句后面的語句,否則不執(zhí)行,但是這只能執(zhí)行一次,在日常生活中,有些事情是需要重復(fù)去做的,C語句就為此引入了循環(huán)語句。所以今天繼續(xù)為大家分享C語言循環(huán)家族
    2022-05-05
  • 一文帶你深入了解Qt中的順序容器類與關(guān)聯(lián)容器類

    一文帶你深入了解Qt中的順序容器類與關(guān)聯(lián)容器類

    Qt中也有很多容器類,他們在存取速度、內(nèi)存開銷等方面進(jìn)行了優(yōu)化,使用起來更輕量級、更便捷,下面就跟隨小編一起來學(xué)習(xí)一下它們的具體使用吧
    2024-04-04
  • 詳解C++ 多態(tài)的實現(xiàn)及原理

    詳解C++ 多態(tài)的實現(xiàn)及原理

    這篇文章主要介紹了C++ 多態(tài)的實現(xiàn)及原理,本文通過實例代碼給大家介紹的非常詳細(xì),具有一定的參考借鑒價值,需要的朋友可以參考下
    2019-05-05
  • 詳解C語言函數(shù)返回值解析

    詳解C語言函數(shù)返回值解析

    這篇文章主要介紹了詳解C語言函數(shù)返回值解析的相關(guān)資料,需要的朋友可以參考下
    2017-06-06
  • c++ 網(wǎng)絡(luò)庫asio的優(yōu)勢

    c++ 網(wǎng)絡(luò)庫asio的優(yōu)勢

    這篇文章主要介紹了c++ 網(wǎng)絡(luò)庫asio的優(yōu)勢,幫助大家更好的利用c++開發(fā)服務(wù)端程序,感興趣的朋友可以了解下
    2020-10-10
  • C語言中字符串與各數(shù)值類型之間的轉(zhuǎn)換方法

    C語言中字符串與各數(shù)值類型之間的轉(zhuǎn)換方法

    這篇文章主要介紹了C語言中字符串與各數(shù)值類型之間的轉(zhuǎn)換方法,文中通過示例代碼介紹的非常詳細(xì),對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧
    2021-03-03
  • C語言實現(xiàn)系統(tǒng)關(guān)機(jī)注銷功能

    C語言實現(xiàn)系統(tǒng)關(guān)機(jī)注銷功能

    這篇文章主要為大家詳細(xì)介紹了C語言實現(xiàn)系統(tǒng)關(guān)機(jī)注銷功能,文中示例代碼介紹的非常詳細(xì),具有一定的參考價值,感興趣的小伙伴們可以參考一下
    2020-02-02

最新評論

建阳市| 尤溪县| 仁布县| 青川县| 常山县| 拜城县| 七台河市| 城步| 苍溪县| 繁峙县| 兰溪市| 肥西县| 安陆市| 丹江口市| 揭东县| 宁波市| 天津市| 凤阳县| 凤城市| 禹州市| 拉萨市| 宜宾市| 尼勒克县| 正宁县| 乐亭县| 邯郸市| 安新县| 翁牛特旗| 钟山县| 和龙市| 南陵县| 石河子市| 锡林浩特市| 吉林省| 巴青县| 南江县| 铁岭县| 华容县| 清水河县| 宜城市| 简阳市|