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

詳解C++ 中的臨時對象

 更新時間:2020年08月27日 10:21:01   作者:Dabelv  
這篇文章主要介紹了C++ 中的臨時對象的相關資料,幫助大家更好的理解和學習c++,感興趣的朋友可以了解下

C++中臨時對象(Temporary Object)又稱無名對象。臨時對象主要出現(xiàn)在如下場景。

1.建立一個沒有命名的非堆(non-heap)對象,也就是無名對象時,會產(chǎn)生臨時對象。

 Integer inte= Integer(5); //用無名臨時對象初始化一個對象

2.構造函數(shù)作為隱式類型轉換函數(shù)時,會創(chuàng)建臨時對象,用作實參傳遞給函數(shù)。

例:

class Integer
{
public:
  Integer(int i):m_val(i){}
  ~Integer(){}
private:
  int m_val;
};

void testFunc(Integer itgr)
{
  // do something
}

那么語句:

 int i = 10; 
 testFunc(i); 

會產(chǎn)生一個臨時對象,作為實參傳遞到testFunc函數(shù)中。

3.函數(shù)返回一個對象時,會產(chǎn)生臨時對象。以返回的對象最作為拷貝構造函數(shù)的實參構造一個臨時對象。

Integer Func()
{
  Integer itgr;
  return itgr;
}

void main()
{
  Integer in;
  in = Func();
}

如下代碼驗證以上結論:

class Integer
{
public:
Integer()
{
 cout<<"Integer default Constructor"<<endl;
};

Integer(const Integer& arg)
{ 
 this->m_val=arg.m_val;
 cout<<"Integer Copy Constructor"<<endl;
};

 Integer(int i):m_val(i){
cout<<"Integer Constructor"<<endl;
};

Integer& operator=(const Integer& arg)
{
  cout<<"Assignment operator function"<<endl;
  this->m_val=arg.m_val;
}

~Integer(){};

int m_val;
};

Integer testFunc(Integer inter)
{
  inter.m_val++;
  cout<<"before return"<<endl;
  return inter;
}
int main(int argc,char* argv[])
{
  Integer inter(5);//Constructor
  Integer resutl; //default constructor
  resutl=testFunc(2);//Constructor,then Copy Constructor,then Assignment operator
  cout<<resutl.m_val<<endl;
  getchar();
  return 0;
}

運行結果:

思考:

1.main函數(shù)中加入如下一條語句會輸出什么?

Integer re=inter;//輸出Assignment operator還是Copy Constructor

推理應該輸出Assignment operator function。但實際輸出結果是:Integer Copy Constructor。

原因是:賦值符函數(shù)不能創(chuàng)建新的對象,它要求”=”的左右對象均已存在,它的作用就是把”=”右邊的對象的值賦給左邊的對象。

2.main函數(shù)中加入如下一條語句會輸出什么?

Integer re=testFunc(10);

按照以上討論,推理出輸出結果應該是:

Integer Constructor
before return
Integer Copy Constructor
Integer Copy Constructor

但實際結果是:

原因是編譯器自動優(yōu)化的結果,只執(zhí)行一次Copy Constructor來構造新的對象,不會再次調(diào)用Copy Constructor,以臨時對象來構造新的對象。

以上就是詳解C++ 中的臨時對象的詳細內(nèi)容,更多關于c++ 臨時對象的資料請關注腳本之家其它相關文章!

相關文章

  • C++ ostream用法案例詳解

    C++ ostream用法案例詳解

    這篇文章主要介紹了C++ ostream用法案例詳解,本篇文章通過簡要的案例,講解了該項技術的了解與使用,以下就是詳細內(nèi)容,需要的朋友可以參考下
    2021-08-08
  • 淺談mwArray和一般數(shù)組的區(qū)別

    淺談mwArray和一般數(shù)組的區(qū)別

    下面小編就為大家?guī)硪黄獪\談mwArray和一般數(shù)組的區(qū)別。小編覺得挺不錯的,現(xiàn)在就分享給大家,也給大家做個參考。一起跟隨小編過來看看吧
    2016-12-12
  • C語言實現(xiàn)登錄注冊和忘記密碼功能

    C語言實現(xiàn)登錄注冊和忘記密碼功能

    這篇文章主要為大家詳細介紹了C語言實現(xiàn)登錄、注冊和忘記密碼功能,文中示例代碼介紹的非常詳細,具有一定的參考價值,感興趣的小伙伴們可以參考一下
    2020-12-12
  • C++中函數(shù)的用法小結

    C++中函數(shù)的用法小結

    這篇文章主要為大家分享下本人在閱讀《C++ Primer》函數(shù)一章時的讀書總結,需要的朋友可以參考下
    2014-02-02
  • 詳析C++中的auto

    詳析C++中的auto

    這篇文章主要介紹了詳析C++中的auto,auto是具有自動存儲器的局部變量,C++11中,標準委員會賦予了auto全新的含義即:auto不再是一個存儲類型指示符,而作為一個新的類型指示符來指示編譯器,下面來看看文章的詳細介紹吧
    2022-01-01
  • C++實現(xiàn)重載矩陣的部分運算符

    C++實現(xiàn)重載矩陣的部分運算符

    這篇文章主要為大家詳細介紹了如何利用C++實現(xiàn)重載矩陣的部分運算符,文中的示例代碼講解詳細,對我們學習C++有一定幫助,需要的可以參考一下
    2022-10-10
  • C++線程之thread詳解

    C++線程之thread詳解

    這篇文章主要為大家詳細介紹了C++線程中的thread,文中示例代碼介紹的非常詳細,具有一定的參考價值,感興趣的小伙伴們可以參考一下,希望能夠給你帶來幫助
    2022-03-03
  • C++實現(xiàn)LeetCode(134.加油站問題)

    C++實現(xiàn)LeetCode(134.加油站問題)

    這篇文章主要介紹了C++實現(xiàn)LeetCode(134.加油站問題),本篇文章通過簡要的案例,講解了該項技術的了解與使用,以下就是詳細內(nèi)容,需要的朋友可以參考下
    2021-07-07
  • C語言中 printf 函數(shù)輸出格式

    C語言中 printf 函數(shù)輸出格式

    這篇文章主要介紹了C語言中 printf 函數(shù)簡介,通過實例代碼給大家介紹Printf輸出格式的相關知識,需要的朋友可以參考下
    2021-08-08
  • C語言中strlen()函數(shù)的使用詳解

    C語言中strlen()函數(shù)的使用詳解

    strlen函數(shù)是用來求字符串長度的函數(shù),這個函數(shù)遇到‘\0’就會停止,且這個長度不包含‘\0’,這篇文章給大家介紹了C語言中strlen()函數(shù)的使用,感興趣的朋友一起看看吧
    2024-02-02

最新評論