欧美bbbwbbbw肥妇,免费乱码人妻系列日韩,一级黄片

C++11中的引用限定符示例代碼

 更新時(shí)間:2023年01月03日 09:14:49   作者:crossoverpptx  
C++中有左值和右值的概念,其實(shí),左值和右值的區(qū)分也同樣適用于類對(duì)象,本文中將左值的類對(duì)象稱為左值對(duì)象,將右值的類對(duì)象稱為右值對(duì)象,對(duì)C++11?引用限定符相關(guān)知識(shí)感興趣的朋友跟隨小編一起看看吧

C++中有左值和右值的概念。其實(shí),左值和右值的區(qū)分也同樣適用于類對(duì)象,本文中將左值的類對(duì)象稱為左值對(duì)象,將右值的類對(duì)象稱為右值對(duì)象。

1. C++11:引用限定符

默認(rèn)情況下,對(duì)于類中用 public 修飾的成員函數(shù),既可以被左值對(duì)象調(diào)用,也可以被右值對(duì)象調(diào)用。舉個(gè)例子:

#include <iostream>
using namespace std;

class demo {
public:
    demo(int num):num(num){}
    int get_num(){
        return this->num;
    }
private:
    int num;
};

int main() {
    demo a(10);
    cout << a.get_num() << endl;
    cout << move(a).get_num() << endl;
    return 0;
}

可以看到,demo 類中的 get_num() 成員函數(shù)既可以被 a 左值對(duì)象調(diào)用,也可以被 move(a) 生成的右值 demo 對(duì)象調(diào)用,運(yùn)行程序會(huì)輸出兩個(gè) 10。

某些場(chǎng)景中,我們可能需要限制調(diào)用成員函數(shù)的對(duì)象的類型(左值還是右值),為此 C++11 新添加了引用限定符。所謂引用限定符,就是在成員函數(shù)的后面添加 "&" 或者 "&&",從而限制調(diào)用者的類型(左值還是右值)。修改上面程序如下:

#include <iostream>
using namespace std;

class demo {
public:
    demo(int num):num(num){}
    int get_num()&{
        return this->num;
    }
private:
    int num;
};

int main() {
    demo a(10);
    cout << a.get_num() << endl;          // 正確
    //cout << move(a).get_num() << endl;  // 錯(cuò)誤
    return 0;
}

和之前的程序相比,我們僅在 get_num() 成員函數(shù)的后面添加了 "&",它可以限定調(diào)用該函數(shù)的對(duì)象必須是左值對(duì)象。因此第 17 行代碼中,move(a) 生成的右值對(duì)象是不允許調(diào)用 get_num() 函數(shù)的。
同理,我們?cè)俅涡薷某绦颍?/p>

#include <iostream>
using namespace std;

class demo {
public:
    demo(int num):num(num){}
    int get_num()&&{
        return this->num;
    }
private:
    int num;
};

int main() {
    demo a(10);
    //cout << a.get_num() << endl;      // 錯(cuò)誤
    cout << move(a).get_num() << endl;  // 正確
    return 0;
}

和先前程序不同的是,get_num() 函數(shù)后根有 "&&" 限定符,它可以限定調(diào)用該函數(shù)的對(duì)象必須是一個(gè)右值對(duì)象。

注意:引用限定符不適用于靜態(tài)成員函數(shù)和友元函數(shù)。

2. const和引用限定符

我們知道,const 也可以用于修飾類的成員函數(shù),我們習(xí)慣稱為常成員函數(shù),例如:

class demo{
public:
    int get_num() const;
}

這里的 get_num() 就是一個(gè)常成員函數(shù)。const 和引用限定符修飾類的成員函數(shù)時(shí),都位于函數(shù)的末尾。C++11 標(biāo)準(zhǔn)規(guī)定,當(dāng)引用限定符和 const 修飾同一個(gè)類的成員函數(shù)時(shí),const 必須位于引用限定符前面。
需要注意的一點(diǎn)是,當(dāng) const && 修飾類的成員函數(shù)時(shí),調(diào)用它的對(duì)象只能是右值對(duì)象;當(dāng) const & 修飾類的成員函數(shù)時(shí),調(diào)用它的對(duì)象既可以是左值對(duì)象,也可以是右值對(duì)象。無(wú)論是 const && 還是 const & 限定的成員函數(shù),內(nèi)部都不允許對(duì)當(dāng)前對(duì)象做修改操作。

舉個(gè)例子:

#include <iostream>
using namespace std;

class demo {
public:
    demo(int num,int num2) :num(num),num2(num2) {}
    //左值和右值對(duì)象都可以調(diào)用
    int get_num() const &{
        return this->num;
    }
    //僅供右值對(duì)象調(diào)用
    int get_num2() const && {
        return this->num2;
    }
private:
    int num;
    int num2;
};

int main() {
    demo a(10,20);
    cout << a.get_num() << endl;        // 正確
    cout << move(a).get_num() << endl;  // 正確
   
    //cout << a.get_num2() << endl;     // 錯(cuò)誤 
    cout << move(a).get_num2() << endl; // 正確
    return 0;
}

到此這篇關(guān)于C++11中的引用限定符的文章就介紹到這了,更多相關(guān)C++11 引用限定符內(nèi)容請(qǐng)搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!

相關(guān)文章

  • C語(yǔ)言實(shí)現(xiàn)日期和時(shí)間處理的常用函數(shù)總結(jié)

    C語(yǔ)言實(shí)現(xiàn)日期和時(shí)間處理的常用函數(shù)總結(jié)

    在C語(yǔ)言中,時(shí)間和日期處理是一項(xiàng)非常基礎(chǔ)的技能,也是開(kāi)發(fā)實(shí)際應(yīng)用程序時(shí)經(jīng)常會(huì)用到的功能,本文為大家總結(jié)了C語(yǔ)言中一些常用的時(shí)間庫(kù)函數(shù),希望對(duì)大家有所幫助
    2023-06-06
  • 基于Matlab實(shí)現(xiàn)中國(guó)象棋的示例代碼

    基于Matlab實(shí)現(xiàn)中國(guó)象棋的示例代碼

    中國(guó)象棋是起源于中國(guó)的一種棋,屬于二人對(duì)抗性游戲的一種,在中國(guó)有著悠久的歷史。由于用具簡(jiǎn)單,趣味性強(qiáng),成為流行極為廣泛的棋藝活動(dòng)。本文將利用Matlab實(shí)現(xiàn)這一游戲,需要的可以參考一下
    2022-02-02
  • vc中float與DWORD的互想轉(zhuǎn)換實(shí)現(xiàn)代碼

    vc中float與DWORD的互想轉(zhuǎn)換實(shí)現(xiàn)代碼

    這篇文章主要介紹了vc中float與DWORD的互想轉(zhuǎn)換實(shí)現(xiàn)代碼,需要的朋友可以參考下
    2017-06-06
  • C++?plog日志使用方法介紹

    C++?plog日志使用方法介紹

    最近突然心血來(lái)潮,想學(xué)一下日志方面的操作。在網(wǎng)上找了很多日志相關(guān)的技術(shù),最終還是決定使用plog,小巧,快速,跨平臺(tái)
    2022-10-10
  • C++指針與引用的異同

    C++指針與引用的異同

    這篇文章主要介紹了C++指針與引用的異同,文章以C++指針與引用的相關(guān)資料結(jié)合指針和引用的相同點(diǎn)和區(qū)別展開(kāi)詳細(xì)內(nèi)容,需要的朋友可以參考一下
    2021-11-11
  • visual studio 2013中配置opencv圖文教程 Opencv2.4.9安裝配置教程

    visual studio 2013中配置opencv圖文教程 Opencv2.4.9安裝配置教程

    這篇文章主要為大家詳細(xì)介紹了Opencv2.4.9安裝教程,以及在visualstudio 2013中opencv的配置步驟,具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下
    2017-04-04
  • C++多重繼承二義性原理實(shí)例解析

    C++多重繼承二義性原理實(shí)例解析

    這篇文章主要介紹了C++多重繼承二義性原理實(shí)例解析,文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友可以參考下
    2020-06-06
  • C語(yǔ)言函數(shù)棧幀解析

    C語(yǔ)言函數(shù)棧幀解析

    下面小編就為大家?guī)?lái)一篇淺談C語(yǔ)言函數(shù)調(diào)用參數(shù)壓棧的相關(guān)問(wèn)題。小編覺(jué)得挺不錯(cuò)的,現(xiàn)在就分享給大家,也給大家做個(gè)參考。一起跟隨小編過(guò)來(lái)看看吧
    2021-09-09
  • C語(yǔ)言菜鳥基礎(chǔ)教程之for循環(huán)

    C語(yǔ)言菜鳥基礎(chǔ)教程之for循環(huán)

    c語(yǔ)言中的for循環(huán)語(yǔ)句使用最為靈活,不僅可以用于循環(huán)次數(shù)已經(jīng)確定的情況,而且可以用于循環(huán)次數(shù)不確定而只給出循環(huán)結(jié)束條件的情況,它完全可以代替while語(yǔ)句.
    2017-10-10
  • c語(yǔ)言讀取txt文件內(nèi)容簡(jiǎn)單實(shí)例

    c語(yǔ)言讀取txt文件內(nèi)容簡(jiǎn)單實(shí)例

    在本篇文章里小編給大家整理的是關(guān)于c語(yǔ)言如何讀取txt文件內(nèi)容,需要的朋友們可以參考下。
    2020-03-03

最新評(píng)論