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

詳解C++ 中的臨時(shí)對(duì)象

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

C++中臨時(shí)對(duì)象(Temporary Object)又稱(chēng)無(wú)名對(duì)象。臨時(shí)對(duì)象主要出現(xiàn)在如下場(chǎng)景。

1.建立一個(gè)沒(méi)有命名的非堆(non-heap)對(duì)象,也就是無(wú)名對(duì)象時(shí),會(huì)產(chǎn)生臨時(shí)對(duì)象。

 Integer inte= Integer(5); //用無(wú)名臨時(shí)對(duì)象初始化一個(gè)對(duì)象

2.構(gòu)造函數(shù)作為隱式類(lèi)型轉(zhuǎn)換函數(shù)時(shí),會(huì)創(chuàng)建臨時(shí)對(duì)象,用作實(shí)參傳遞給函數(shù)。

例:

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

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

那么語(yǔ)句:

 int i = 10; 
 testFunc(i); 

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

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

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

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

如下代碼驗(yàn)證以上結(jié)論:

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

運(yùn)行結(jié)果:

思考:

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

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

推理應(yīng)該輸出Assignment operator function。但實(shí)際輸出結(jié)果是:Integer Copy Constructor。

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

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

Integer re=testFunc(10);

按照以上討論,推理出輸出結(jié)果應(yīng)該是:

Integer Constructor
before return
Integer Copy Constructor
Integer Copy Constructor

但實(shí)際結(jié)果是:

原因是編譯器自動(dòng)優(yōu)化的結(jié)果,只執(zhí)行一次Copy Constructor來(lái)構(gòu)造新的對(duì)象,不會(huì)再次調(diào)用Copy Constructor,以臨時(shí)對(duì)象來(lái)構(gòu)造新的對(duì)象。

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

相關(guān)文章

最新評(píng)論

容城县| 额尔古纳市| 南昌市| 英吉沙县| 竹山县| 长沙县| 长治市| 宁乡县| 远安县| 普安县| 青州市| 蒙阴县| 中江县| 曲水县| 观塘区| 丰台区| 崇礼县| 杭锦后旗| 华安县| 如皋市| 永春县| 万源市| 宣威市| 龙川县| 中山市| 罗江县| 岳阳市| 武宁县| 大连市| 达拉特旗| 霍城县| 尼玛县| 柳河县| 宿迁市| 襄垣县| 咸宁市| 鸡东县| 青海省| 江永县| 马边| 澳门|