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

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)門est t = 100;是隱式初始化對(duì)象,但是如果加上強(qiáng)制類型轉(zhuǎn)換后,就不會(huì)有錯(cuò)誤了。

強(qiáng)制類型轉(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,下面的語句就無法編譯通過;不加可以。
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;//編譯不過 
 //test(t2);//編譯不過 
}

觸發(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ì)象類型test(t2);

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

但是用gdb看了一下在return處并沒有調(diào)用拷貝構(gòu)造函數(shù),所以test方法結(jié)束后,tmp也沒有被釋放,調(diào)用test方法的t5的內(nèi)存地址和tmp是一樣的。個(gè)人猜測:老版本的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)文章

  • Visual Studio 2022 Preview 使用 C++20 Module的詳細(xì)過程

    Visual Studio 2022 Preview 使用 C++20 Module的詳細(xì)過程

    這篇文章主要介紹了Visual Studio 2022 Preview 使用 C++20 Module的過程,本文通過項(xiàng)目分析實(shí)例代碼相結(jié)合給大家介紹的非常詳細(xì),需要的朋友可以參考下
    2021-09-09
  • Recommended C Style and Coding Standards中文翻譯版

    Recommended C Style and Coding Standards中文翻譯版

    本文翻譯自Recommended C Style and Coding Standards(C語言編碼風(fēng)格和標(biāo)準(zhǔn)),需要的朋友可以參考下
    2014-04-04
  • 詳解C++如何高效利用CPU緩存

    詳解C++如何高效利用CPU緩存

    高效利用CPU緩存是編寫高性能C++代碼的關(guān)鍵之一,所以這篇文章小編主要來和大家介紹一下C++如何實(shí)現(xiàn)高效利用CPU緩存,需要的可以參考一下
    2024-02-02
  • EasyX繪制透明背景圖的方法詳解

    EasyX繪制透明背景圖的方法詳解

    這篇文章主要為大家詳細(xì)介紹了EasyX繪制透明背景圖的方法,文中的示例代碼講解詳細(xì),對(duì)我們深入了解EasyX有一定的幫助,需要的可以參考一下
    2023-01-01
  • Qt輸入類控件用法超詳細(xì)講解

    Qt輸入類控件用法超詳細(xì)講解

    Qt是一個(gè)著名的GUI框架,用來開發(fā)和用戶交互的圖形界面,作為GUI框架,豐富的控件和靈活的事件機(jī)制是不可或缺的,Qt在這一方面做得非常優(yōu)秀,下面這篇文章主要給大家介紹了關(guān)于Qt輸入類控件用法的相關(guān)資料,需要的朋友可以參考下
    2024-08-08
  • 解讀C++11 原生字符串

    解讀C++11 原生字符串

    這篇文章主要介紹了C++11 原生字符串的相關(guān)資料,幫助大家更好的理解和學(xué)習(xí)c++11,感興趣的朋友可以了解下
    2020-08-08
  • 一問學(xué)會(huì)QT時(shí)間類

    一問學(xué)會(huì)QT時(shí)間類

    QT獲取時(shí)間的類有3個(gè),分別是QDate、QTime、QDateTime,他們屬于QT的network模塊。本文詳細(xì)的介紹了這3個(gè)模塊的使用,感興趣的可以了解一下
    2023-04-04
  • C語言數(shù)據(jù)結(jié)構(gòu)之單鏈表的查找和建立

    C語言數(shù)據(jù)結(jié)構(gòu)之單鏈表的查找和建立

    鏈表是一種物理存儲(chǔ)結(jié)構(gòu)上非連續(xù)、非順序的存儲(chǔ)結(jié)構(gòu),數(shù)據(jù)元素的邏輯順序是通過鏈表中的指針鏈接次序?qū)崿F(xiàn)的。本文將和大家一起聊聊C語言中單鏈表的查找和建立,感興趣的可以學(xué)習(xí)一下
    2022-09-09
  • C++ 中的new 和 delete 運(yùn)算符及new和malloc的區(qū)別解析

    C++ 中的new 和 delete 運(yùn)算符及new和malloc的區(qū)別解析

    在C++中,又引出了一個(gè)新玩法:new 和 delete,在C++中,new是用來動(dòng)態(tài)開辟內(nèi)存的,delete是用來釋放我們所動(dòng)態(tài)開辟的內(nèi)存C++中的new和delete運(yùn)算符及new和malloc的區(qū)別解析,感興趣的朋友跟隨小編一起看看吧
    2024-11-11
  • C語言簡明講解單引號(hào)與雙引號(hào)的使用

    C語言簡明講解單引號(hào)與雙引號(hào)的使用

    這篇文章主要介紹了在C語言里單引號(hào)和雙引號(hào)的使用,本文通過實(shí)例代碼說明了單引號(hào)和雙引號(hào)的概念與各自的用法,以下就是詳細(xì)內(nèi)容,需要的朋友可以參考下
    2022-04-04

最新評(píng)論

东兴市| 临武县| 宣汉县| 蒲城县| 苍山县| 玉林市| 岳普湖县| 宜兰县| 汉沽区| 中山市| 五家渠市| 霍林郭勒市| 息烽县| 邹平县| 庆城县| 都江堰市| 资中县| 饶河县| 上饶县| 都江堰市| 周宁县| 遂平县| 汶上县| 铜山县| 依兰县| 沾益县| 昌吉市| 徐州市| 万全县| 宁远县| 阳东县| 萝北县| 涟水县| 佛坪县| 万宁市| 稷山县| 湖南省| 襄樊市| 金寨县| 太康县| 凌云县|