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

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

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

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

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

默認(rèn)情況下,對于類中用 public 修飾的成員函數(shù),既可以被左值對象調(diào)用,也可以被右值對象調(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;
    return 0;
}

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

某些場景中,我們可能需要限制調(diào)用成員函數(shù)的對象的類型(左值還是右值),為此 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;  // 錯誤
    return 0;
}

和之前的程序相比,我們僅在 get_num() 成員函數(shù)的后面添加了 "&",它可以限定調(diào)用該函數(shù)的對象必須是左值對象。因此第 17 行代碼中,move(a) 生成的右值對象是不允許調(diào)用 get_num() 函數(shù)的。
同理,我們再次修改程序:

#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;
}

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

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

2. const和引用限定符

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

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

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

舉個例子:

#include <iostream>
using namespace std;

class demo {
public:
    demo(int num,int num2) :num(num),num2(num2) {}
    //左值和右值對象都可以調(diào)用
    int get_num() const &{
        return this->num;
    }
    //僅供右值對象調(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;     // 錯誤 
    cout << move(a).get_num2() << endl; // 正確
    return 0;
}

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

相關(guān)文章

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

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

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

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

    中國象棋是起源于中國的一種棋,屬于二人對抗性游戲的一種,在中國有著悠久的歷史。由于用具簡單,趣味性強(qiá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日志使用方法介紹

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

    C++指針與引用的異同

    這篇文章主要介紹了C++指針與引用的異同,文章以C++指針與引用的相關(guān)資料結(jié)合指針和引用的相同點(diǎn)和區(qū)別展開詳細(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的配置步驟,具有一定的參考價值,感興趣的小伙伴們可以參考一下
    2017-04-04
  • C++多重繼承二義性原理實(shí)例解析

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

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

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

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

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

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

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

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

最新評論