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

c/c++拷貝構(gòu)造函數(shù)和關(guān)鍵字explicit詳解

 更新時(shí)間:2018年08月17日 08:38:20   作者:小石王  
這篇文章主要介紹了c/c++拷貝構(gòu)造函數(shù)和關(guān)鍵字explicit的相關(guān)知識(shí),非常不錯(cuò),具有一定的參考借鑒價(jià)值,需要的朋友可以參考下

關(guān)鍵字explicit

修飾構(gòu)造方法的關(guān)鍵字,加上了,就告訴編譯器,不可以隱式初始化對(duì)象;不加就可以隱式初始化對(duì)象;
下面的代碼是可以正常編譯執(zhí)行的,但是加了關(guān)鍵字explicit,編譯就會(huì)錯(cuò)我,因?yàn)門(mén)est t = 100;是隱式初始化對(duì)象,但是如果加上強(qiáng)制類(lèi)型轉(zhuǎn)換后,就不會(huì)有錯(cuò)誤了。

強(qiáng)制類(lèi)型轉(zhuǎn)換:Test t = (Test)100;

class Test{
public:
 Test(int d):data(d){//explicit 
  cout << "C:" << this << endl;
 }
}
int main(){
 Test t = 100;
}
拷貝構(gòu)造函數(shù)如果加上了explicit,下面的語(yǔ)句就無(wú)法編譯通過(guò);不加可以。
class Test{
public:
 //拷貝構(gòu)造函數(shù)
 explicit Test(const Test &t){
  data = t.data;
 }
 int getData(){
  return data;
 }
private:
 int data;
};
void test(Test x){

}
int main(){
 Test t2(t1);//調(diào)用拷貝構(gòu)造函數(shù)                    
 //Test t3 = t2;//編譯不過(guò) 
 //test(t2);//編譯不過(guò) 
}

觸發(fā)拷貝構(gòu)造函數(shù)的4種方式

​ 1,Test t2(t1);//調(diào)用拷貝構(gòu)造函數(shù)

​ 2,聲明的同時(shí)就賦值Test t3 = t2會(huì)調(diào)用拷貝構(gòu)造函數(shù);但是注意下面這種不會(huì)調(diào)用拷貝構(gòu)造函數(shù)。

​ Test t3;

​ t3 = t2;//會(huì)調(diào)用=的重載方法

​ 3,方法的參數(shù)是對(duì)象類(lèi)型test(t2);

​ 4,方法的返回值是對(duì)象類(lèi)型。原因:對(duì)象tmp在方法結(jié)束后就被釋放掉了,要返回到函數(shù)外,必須要復(fù)制tmp.

但是用gdb看了一下在return處并沒(méi)有調(diào)用拷貝構(gòu)造函數(shù),所以test方法結(jié)束后,tmp也沒(méi)有被釋放,調(diào)用test方法的t5的內(nèi)存地址和tmp是一樣的。個(gè)人猜測(cè):老版本的gcc編譯器可能會(huì)在return處調(diào)用拷貝構(gòu)造函數(shù),但是新的編譯器(gcc 4.8.5-20)為了提高效率,避免了一次多余的拷貝。

void test(Test x){//進(jìn)入函數(shù)的時(shí)點(diǎn)會(huì)調(diào)用拷貝構(gòu)造函數(shù)
 int value;
 value = x.getData();
 Test tmp(value);
 return tmp;//return的時(shí)點(diǎn)會(huì)調(diào)用拷貝構(gòu)造函數(shù)
}
Test t5 = test(t1);

相關(guān)文章

  • C++函數(shù)模板與類(lèi)模板相同與不同介紹

    C++函數(shù)模板與類(lèi)模板相同與不同介紹

    C++語(yǔ)言的模板技術(shù)包括函數(shù)模板和類(lèi)模板,模板技術(shù)是一種代碼重用技術(shù),函數(shù)和類(lèi)是C++語(yǔ)言中兩種主要的重用代碼形式,這篇文章主要介紹了C++函數(shù)模板和類(lèi)模板,需要的朋友可以參考下
    2022-08-08
  • 單詞小助手C語(yǔ)言版

    單詞小助手C語(yǔ)言版

    這篇文章主要為大家詳細(xì)介紹了C語(yǔ)言版的單詞小助手,文中示例代碼介紹的非常詳細(xì),具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下
    2019-10-10
  • C語(yǔ)言零基礎(chǔ)徹底掌握預(yù)處理上篇

    C語(yǔ)言零基礎(chǔ)徹底掌握預(yù)處理上篇

    在C語(yǔ)言的程序中包括各種以符號(hào)#開(kāi)頭的編譯指令,這些指令稱(chēng)為預(yù)處理命令。預(yù)處理命令屬于C語(yǔ)言編譯器,而不是C語(yǔ)言的組成部分,通過(guò)預(yù)處理命令可擴(kuò)展C語(yǔ)言程序設(shè)計(jì)的環(huán)境
    2022-08-08
  • C語(yǔ)言中各類(lèi)指針的用法(小結(jié))

    C語(yǔ)言中各類(lèi)指針的用法(小結(jié))

    這篇文章主要介紹了C語(yǔ)言中各類(lèi)指針的用法(小結(jié)),文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來(lái)一起學(xué)習(xí)學(xué)習(xí)吧
    2020-02-02
  • C語(yǔ)言實(shí)現(xiàn)紙牌游戲之小貓釣魚(yú)算法

    C語(yǔ)言實(shí)現(xiàn)紙牌游戲之小貓釣魚(yú)算法

    這篇文章主要為大家詳細(xì)介紹了C語(yǔ)言實(shí)現(xiàn)紙牌游戲之小貓釣魚(yú)算法,具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下
    2019-01-01
  • C語(yǔ)言數(shù)據(jù)結(jié)構(gòu)樹(shù)的雙親表示法實(shí)例詳解

    C語(yǔ)言數(shù)據(jù)結(jié)構(gòu)樹(shù)的雙親表示法實(shí)例詳解

    這篇文章主要介紹了C語(yǔ)言數(shù)據(jù)結(jié)構(gòu)樹(shù)的雙親表示法實(shí)例詳解的相關(guān)資料,需要的朋友可以參考下
    2017-06-06
  • C++進(jìn)程的創(chuàng)建和進(jìn)程ID標(biāo)識(shí)詳細(xì)介紹

    C++進(jìn)程的創(chuàng)建和進(jìn)程ID標(biāo)識(shí)詳細(xì)介紹

    傳統(tǒng)的C++(C++98)中并沒(méi)有引入線程這個(gè)概念。linux和unix操作系統(tǒng)的設(shè)計(jì)采用的是多進(jìn)程,進(jìn)程間的通信十分方便,同時(shí)進(jìn)程之間互相有著獨(dú)立的空間,不會(huì)污染其他進(jìn)程的數(shù)據(jù),天然的隔離性給程序的穩(wěn)定性帶來(lái)了很大的保障
    2022-08-08
  • C語(yǔ)言廣播的使用詳解

    C語(yǔ)言廣播的使用詳解

    顧名思義可以把自己的數(shù)據(jù)發(fā)送給在特定范圍內(nèi)的所有人;我們網(wǎng)絡(luò)編程中的廣播一般是通過(guò)特定的廣播地址把自己的數(shù)據(jù)發(fā)送給局域網(wǎng)內(nèi)當(dāng)前在線的客戶(hù)端
    2022-05-05
  • C++實(shí)現(xiàn)讀取特定路徑下文件夾及文件名的方法

    C++實(shí)現(xiàn)讀取特定路徑下文件夾及文件名的方法

    這篇文章主要介紹了C++實(shí)現(xiàn)讀取特定路徑下文件夾及文件名的方法,需要的朋友可以參考下
    2014-07-07
  • C 讀取ini文件的實(shí)例詳解

    C 讀取ini文件的實(shí)例詳解

    這篇文章主要介紹了C 讀取ini文件的實(shí)例詳解的相關(guān)資料,希望通過(guò)本文能幫助到大家,讓大家實(shí)現(xiàn)這樣的功能,需要的朋友可以參考下
    2017-10-10

最新評(píng)論