色哟哟视频在线观看-色哟哟视频在线-色哟哟欧美15最新在线-色哟哟免费在线观看-国产l精品国产亚洲区在线观看-国产l精品国产亚洲区久久

0
  • 聊天消息
  • 系統消息
  • 評論與回復
登錄后你可以
  • 下載海量資料
  • 學習在線課程
  • 觀看技術視頻
  • 寫文章/發帖/加入社區
會員中心
創作中心

完善資料讓更多小伙伴認識你,還能領取20積分哦,立即完善>

3天內不再提示

【ModernCpp】新特性之CTAD代碼示例

CPP開發者 ? 來源:騰訊云計算 ? 2023-12-20 14:00 ? 次閱讀

最近在閱讀C++ Templates 2nd,發現有些很有意思的新特性,今天,借助本文,分享給大家。

從一個例子入手

首先,我們看如下例子:

template
classAdd{
public:
Add(Tfirst,Tsecond):first_{first},second_{second}{}
Tresult()const{returnfirst+second;}
private:
Tfirst_;
Tsecond_;
};

這個例子很簡單,聲明一個模板類Add,接收類型為T的構造函數Add,以及一個返回operator+結果的result()函數。

在c++17之前,如果我們要使用Add類,往往必須像如下這么做:

intmain(){
Addti(1,2);
return0;
}

即在實例化對象ot的時候必須指明類型int

自C++17起引入了新的特性Class Template Argument Deduction,簡稱為CTAD,即類模板參數推導,那么就可以像如下這樣實例化ADD類:

intmain(){
Addti(1,2);//T被推導為int
Addtd{1.245,3.1415};//T被推導為double
Addtf={0.24f,0.34f};//T被推到位float
return0;
}

用例

上面的例子,我們已經體會到了CTAD帶來的好處(代碼間接),下面結合在項目中的用的例子更進一步的來說明CTAD。

相比我們都知道std::lock_guard類,其主要用了實現RAII功能,尤其在多線程環境中用的最多,如下:

std::mutexm;
std::recursive_timed_mutexrm;

voidfun1(){
std::lock_guardlg{m};
//dosth
}

voidfun2(){
std::lock_guardlg{rm};
//dosth
}

在C++17,我們往往得像上面這樣寫,即需要顯式指定lock_guard的類型。但是,自C++17起,可以像如下這樣寫:

std::mutexm;
std::recursive_timed_mutexrm;

voidfun1(){
std::lock_guardlg{m};
//dosth
}

voidfun2(){
std::lock_guardlg{rm};
//dosth
}

顯然,代碼更加簡潔統一。

限制

雖然CTAD用起來很方便,但是相對于不使用CTAD特性,有時候CTAD會存在一些問題,即編譯器推導的類型并不是我們所預期的,仍然使用第一節中的例子:

intmain(){
Addts("hello,","world!
");
autoret=ts.result();

return0;
}

在編譯階段,會報如下錯誤:

error:invalidoperandsoftypes'constchar*const'and'constchar*const'tobinary'operator+'
Tresult()const{returnfirst_+second_;}

即編譯器會將"hello "和"world! "推導成為const charconst,而c++的char是不支持operator+操作的,這就導致了上面的編譯錯誤。

此時,我們可以使用C++17之前的實例方法即顯示指明類型,如下:

intmain(){
Addts("hello,","world!
");
autoret=ts.result();

return0;
}

如果這樣做的話,多少有點失去了CTAD的好處,為了解決這種類似的問題,C++17支持顯示類型推導,即添加代碼:

Add(constchar*,constchar*)->Add;

需要注意的是,這一行類型推導需要加在類聲明之后,這樣編譯器在遇到參數為const cha*的時候,會自動將其推導為std::string.

這樣,我們的例子最后如下:

Add(constchar*,constchar*)->Add;
intmain(){
Addts("hello","world!
");
ts.result();
}

以上~~

審核編輯:黃飛

聲明:本文內容及配圖由入駐作者撰寫或者入駐合作網站授權轉載。文章觀點僅代表作者本人,不代表電子發燒友網立場。文章及其配圖僅供工程師學習之用,如有內容侵權或者其他違規問題,請聯系本站處理。 舉報投訴
  • 多線程
    +關注

    關注

    0

    文章

    278

    瀏覽量

    20052
  • C++
    C++
    +關注

    關注

    22

    文章

    2114

    瀏覽量

    73789
  • 編譯器
    +關注

    關注

    1

    文章

    1642

    瀏覽量

    49238

原文標題:【ModernCpp】新特性之CTAD

文章出處:【微信號:CPP開發者,微信公眾號:CPP開發者】歡迎添加關注!文章轉載請注明出處。

收藏 人收藏

    評論

    相關推薦

    Labview提示用戶輸入示例

    Labview提示用戶輸入示例,很好的Labview資料,快來下載學習吧。
    發表于 04-19 11:17 ?0次下載

    excel vba代碼 示例講解

    excel vba代碼 示例講解
    發表于 09-07 09:36 ?25次下載
    excel vba<b class='flag-5'>代碼</b> <b class='flag-5'>示例</b>講解

    代碼編寫器Studio的新的和改進的特性詳細概述

    該應用說明描述了代碼編寫器Studio的新的和改進的特性。 (CCS)2并提供如何使用新功能的說明。這是利用使用代碼編寫器Studio 2裝運的現有示例
    發表于 04-25 15:08 ?1次下載
    <b class='flag-5'>代碼</b>編寫器Studio的新的和改進的<b class='flag-5'>特性</b>詳細概述

    MSP430系列用戶指導和示例代碼

    MSP430系列用戶指導和示例代碼
    發表于 05-08 09:42 ?28次下載
    MSP430<b class='flag-5'>之</b>系列用戶指導和<b class='flag-5'>示例</b><b class='flag-5'>代碼</b>

    python代碼示例基于Python的日歷api調用代碼實例

    本文檔的主要內容詳細介紹的是python代碼示例基于Python的日歷api調用代碼實例。
    發表于 09-06 14:25 ?42次下載
    python<b class='flag-5'>代碼</b><b class='flag-5'>示例</b><b class='flag-5'>之</b>基于Python的日歷api調用<b class='flag-5'>代碼</b>實例

    AD593X代碼示例

    AD593X代碼示例
    發表于 03-23 08:18 ?14次下載
    AD593X<b class='flag-5'>代碼</b><b class='flag-5'>示例</b>

    BeMicro代碼示例

    BeMicro代碼示例
    發表于 05-10 12:21 ?0次下載
    BeMicro<b class='flag-5'>代碼</b><b class='flag-5'>示例</b>

    ezLINX?示例PC應用程序源代碼

    ezLINX?示例PC應用程序源代碼
    發表于 06-05 19:12 ?1次下載
    ezLINX?<b class='flag-5'>示例</b>PC應用程序源<b class='flag-5'>代碼</b>

    機器學習必學的Python代碼示例

    機器學習必學的Python代碼示例
    發表于 06-21 09:35 ?14次下載

    華為游戲服務示例代碼教程案例

    概述 游戲服務kit安卓示例代碼集成了華為游戲服務的眾多API,提供了示例代碼程序供您參考和使用,下面是對示例
    發表于 04-11 11:09 ?4次下載

    基于keil的AD7366示例代碼

    基于keil的AD7366示例代碼分享
    發表于 10-08 14:58 ?3次下載

    RAA489204 示例代碼軟件手冊

    RAA489204 示例代碼軟件手冊
    發表于 01-10 18:52 ?0次下載
    RAA489204 <b class='flag-5'>示例</b><b class='flag-5'>代碼</b>軟件手冊

    RAA489204 示例代碼軟件手冊

    RAA489204 示例代碼軟件手冊
    發表于 06-30 19:23 ?0次下載
    RAA489204 <b class='flag-5'>示例</b><b class='flag-5'>代碼</b>軟件手冊

    安全驅動示例代碼和實現

    示例代碼獲取和集成 本示例中的驅動只實現了對內存的讀寫操作,并提供了測試使用的TA和CA。 讀者可使用如下指令從GitHub上獲取到示例代碼
    的頭像 發表于 10-30 16:07 ?684次閱讀
    安全驅動<b class='flag-5'>示例</b><b class='flag-5'>代碼</b>和實現

    自己編寫函數示例代碼很難嗎?分享幾個示例

    Q A 問: Arduino Uno的函數示例 我決定自己編寫函數示例代碼,因為這應該是Arduino中的基本示例。網絡上確實有關于使用函數的文檔,但是,如果要嘗試使用
    的頭像 發表于 11-16 16:05 ?556次閱讀
    自己編寫函數<b class='flag-5'>示例</b><b class='flag-5'>代碼</b>很難嗎?分享幾個<b class='flag-5'>示例</b>!
    主站蜘蛛池模板: 久久久无码AV精品亚洲A片软件 | 久久久久久电影 | 少女free大陆 | 国产免费午夜 | 99热成人精品国产免男男 | 大胆国模一区二区三区伊人 | 韩国羞羞秘密教学子开车漫书 | 玩弄人妻少妇500系列网址 | 亚洲 成人网 | 亚洲成人99| 999人在线精品播放视频 | 桥本有菜护士 | 中国农民真实bbwbbw | 色一情一乱一伦一区二区三区 | 日本又黄又爽又色又刺激的视频 | 果冻传媒在线看免费高清 | 法国剧丝袜情版h级在线电影 | 永久免费在线观看视频 | 亚洲精品高清中文字幕完整版 | 久久综合狠狠综合久久综合88 | 高傲教师麻麻被同学调教123 | 日本夜爽爽一区二区三区 | 亚洲国产日韩欧美高清片a 亚洲国产日韩a精品乱码 | 狠狠色狠狠色综合日日91app | 99精品国产免费久久久久久下载 | 岛国片免费看 | 午夜视频在线瓜伦 | 97人人添人人澡人人澡人人澡 | 色偷偷网站 | 24小时日本免费看 | 日日操夜夜操狠狠操 | 欧美成人一区二免费视频 | 高冷师尊被CAO成SAO货 | 国产高清视频a在线大全 | 666永久视频在线 | 国产学生无码中文视频一区 | 免费国产久久拍久久爱 | 花蝴蝶在线直播观看 | 嗯啊哈啊好棒用力插啊 | 亚洲免费精品视频 | 久久www免费人成高清 |