日韩成人免费在线_国产成人一二_精品国产免费人成电影在线观..._日本一区二区三区久久久久久久久不

當(dāng)前位置:首頁 > 科技  > 軟件

C++函數(shù)模板:掌握返回類型推導(dǎo)的藝術(shù)

來源: 責(zé)編: 時間:2024-01-18 09:41:15 293觀看
導(dǎo)讀編譯器推導(dǎo)返回類型討論 add() 函數(shù)模板的示例,讓編譯器推導(dǎo)返回值的類型確實是個好主意。然而,返回類型依賴于模板類型參數(shù),那該如何實現(xiàn)呢?例如,考慮以下函數(shù)模板:template <typename T1, typename T2>RetType add(const

編譯器推導(dǎo)返回類型

討論 add() 函數(shù)模板的示例,讓編譯器推導(dǎo)返回值的類型確實是個好主意。然而,返回類型依賴于模板類型參數(shù),那該如何實現(xiàn)呢?例如,考慮以下函數(shù)模板:yPB28資訊網(wǎng)——每日最新資訊28at.com

template <typename T1, typename T2>RetType add(const T1& t1, const T2& t2) {    return t1 + t2;}

在這個示例中,RetType 應(yīng)該是表達(dá)式 t1 + t2 的類型,但你無法知道這一點,因為你不知道 T1 和 T2 是什么。yPB28資訊網(wǎng)——每日最新資訊28at.com

yPB28資訊網(wǎng)——每日最新資訊28at.com

自動類型推導(dǎo)

自 C++14 起,你可以讓編譯器自動推導(dǎo)函數(shù)的返回類型。因此,你可以簡單地將 add() 寫成如下:yPB28資訊網(wǎng)——每日最新資訊28at.com

template <typename T1, typename T2>auto add(const T1& t1, const T2& t2) {    return t1 + t2;}

在 C++ 中,當(dāng)使用 auto 關(guān)鍵字來推導(dǎo)函數(shù)返回值的類型時,它會自動去除表達(dá)式中的引用(reference)和 const 限定符。這意味著,如果函數(shù)的返回類型原本是一個引用或 const 類型,使用 auto 推導(dǎo)后,返回值將會失去這些屬性。例如,如果原本返回的是一個 const 引用,使用 auto 推導(dǎo)后,返回值將僅是一個值,而非引用,并且也不再是 const 類型。yPB28資訊網(wǎng)——每日最新資訊28at.com

對于某些函數(shù)來說,這種去除引用和 const 的行為是可以接受的。例如,在 add() 函數(shù)模板中,如果使用 auto,這通常沒問題,因為 operator+(加法運算符)一般返回一個新的對象,而不是引用或 const 對象。yPB28資訊網(wǎng)——每日最新資訊28at.com

然而,在其他一些情況下,可能需要保留函數(shù)返回值的原始屬性,比如其為引用或 const 類型。在這些情況下,簡單地使用 auto 來推導(dǎo)返回類型可能就不夠理想了。因此,需要使用其他方法(使用 decltype(auto) 的函數(shù)模板)來確保函數(shù)返回值的原始屬性被正確保留。yPB28資訊網(wǎng)——每日最新資訊28at.com

auto 與 decltype 的區(qū)別

考慮以下非模板示例,了解 auto 和 decltype 之間的差異:yPB28資訊網(wǎng)——每日最新資訊28at.com

const std::string message { "Test" };const std::string& getString() { return message; }auto s1 { getString() }; // s1 是 string 類型,進(jìn)行了拷貝const auto& s2 { getString() }; // s2 是對常量的引用decltype(getString()) s3 { getString() }; // s3 是 const string& 類型decltype(auto) s4 { getString() }; // s4 也是 const string& 類型

使用 decltype(auto) 的函數(shù)模板

有了這些知識,我們可以使用 decltype(auto) 來編寫我們的 add() 函數(shù)模板,以避免去除任何 const 和引用限定符:yPB28資訊網(wǎng)——每日最新資訊28at.com

template <typename T1, typename T2>decltype(auto) add(const T1& t1, const T2& t2) {    return t1 + t2;}

C++14 之前的方法

在 C++14 之前,也就是在函數(shù)返回類型推導(dǎo)和 decltype(auto) 得到支持之前,問題是通過使用 decltype(expression) 來解決的,這是 C++11 引入的。例如,你可能會寫出以下代碼:yPB28資訊網(wǎng)——每日最新資訊28at.com

template <typename T1, typename T2>decltype(t1 + t2) add(const T1& t1, const T2& t2) {    return t1 + t2;}

然而,這是錯誤的。你在原型行的開頭使用了 t1 和 t2,但這些參數(shù)還未知。t1 和 t2 在到達(dá)參數(shù)列表末尾時才變得已知。yPB28資訊網(wǎng)——每日最新資訊28at.com

這個問題曾經(jīng)通過替代函數(shù)語法解決。注意,在這種語法中,auto 用于原型行的開頭,而實際的返回類型在參數(shù)列表之后指定(尾隨返回類型);因此,參數(shù)的yPB28資訊網(wǎng)——每日最新資訊28at.com

名稱(以及它們的類型,從而 t1 + t2 的類型)是已知的:yPB28資訊網(wǎng)——每日最新資訊28at.com

template<typename T1, typename T2>auto add(const T1& t1, const T2& t2) -> decltype(t1 + t2) {    return t1 + t2;}

注意:現(xiàn)在 C++ 支持 auto 返回類型推導(dǎo)和 decltype(auto),建議使用這些機(jī)制,而不是替代函數(shù)語法。yPB28資訊網(wǎng)——每日最新資訊28at.com

yPB28資訊網(wǎng)——每日最新資訊28at.com

C++20 的新特性

C++20 引入了一種簡化的函數(shù)模板語法。再次回顧前面的 add() 函數(shù)模板。這里是推薦的版本:yPB28資訊網(wǎng)——每日最新資訊28at.com

template <typename T1, typename T2>decltype(auto) add(const T1& t1, const T2& t2) {    return t1 + t2;}

看這個示例,為了指定一個簡單的函數(shù)模板,語法顯得相當(dāng)冗長。使用簡化的函數(shù)模板語法,可以更優(yōu)雅地寫成如下:yPB28資訊網(wǎng)——每日最新資訊28at.com

decltype(auto) add(const auto& t1, const auto& t2) {    return t1 + t2;}

使用這種語法,不再需要 template<> 規(guī)范來指定模板參數(shù)。相反,以前在實現(xiàn)中使用的 T1 和 T2 類型現(xiàn)在被指定為 auto。這種簡化的語法只是語法糖;編譯器會自動將這種簡化實現(xiàn)轉(zhuǎn)換為更長的原始代碼。基本上,每個被指定為 auto 的函數(shù)參數(shù)都成為一個模板類型參數(shù)。yPB28資訊網(wǎng)——每日最新資訊28at.com

需要注意的兩個問題

(1) 不同的模板類型參數(shù):每個被指定為auto的參數(shù)都成為不同的模板類型參數(shù)。假設(shè)你有這樣一個函數(shù)模板:yPB28資訊網(wǎng)——每日最新資訊28at.com

template <typename T>decltype(auto) add(const T& t1, const T& t2) {    return t1 + t2;}

這個版本只有一個模板類型參數(shù),而函數(shù)的兩個參數(shù) t1 和 t2 都是 const T& 類型。對于這樣的函數(shù)模板,你不能使用簡化語法,因為這將被轉(zhuǎn)換為具有兩個不同模板類型參數(shù)的函數(shù)模板。yPB28資訊網(wǎng)——每日最新資訊28at.com

(2) 無法顯式使用推導(dǎo)類型:你不能在函數(shù)模板的實現(xiàn)中顯式使用這些自動推導(dǎo)的類型,因為這些自動推導(dǎo)的類型沒有名稱。如果你需要這樣做,你要么需要繼續(xù)使用普通的函數(shù)模板語法,要么使用 decltype() 來確定類型。yPB28資訊網(wǎng)——每日最新資訊28at.com

// C++50 中的 auto 使用auto auto(auto... args) {    return (... + args);}

本文鏈接:http://m.www897cc.com/showinfo-26-64104-0.htmlC++函數(shù)模板:掌握返回類型推導(dǎo)的藝術(shù)

聲明:本網(wǎng)頁內(nèi)容旨在傳播知識,若有侵權(quán)等問題請及時與本網(wǎng)聯(lián)系,我們將在第一時間刪除處理。郵件:2376512515@qq.com

上一篇: 2024年不容錯過的十個開發(fā)框架

下一篇: 微服務(wù)和無服務(wù)器架構(gòu)時代的持續(xù)測試

標(biāo)簽:
  • 熱門焦點
  • 女孩租房開2小時空調(diào)用完100元電費引熱議:5級能耗惹不起 月薪過萬電費也交不起

    近日,江蘇蘇州一女孩租房當(dāng)天充值了100元電費,開著空調(diào)不到2小時發(fā)現(xiàn)電費已用完。對于為什么這個快,房東表示,電表壞了這種情況很多,之前也遇到過,給租客換
  • 一篇聊聊Go錯誤封裝機(jī)制

    %w 是用于錯誤包裝(Error Wrapping)的格式化動詞。它是用于 fmt.Errorf 和 fmt.Sprintf 函數(shù)中的一個特殊格式化動詞,用于將一個錯誤(或其他可打印的值)包裝在一個新的錯誤中。使
  • 讓我們一起聊聊文件的操作

    文件【1】文件是什么?文件是保存數(shù)據(jù)的地方,是數(shù)據(jù)源的一種,比如大家經(jīng)常使用的word文檔、txt文件、excel文件、jpg文件...都是文件。文件最主要的作用就是保存數(shù)據(jù),它既可以保
  • 之家push系統(tǒng)迭代之路

    前言在這個信息爆炸的互聯(lián)網(wǎng)時代,能夠及時準(zhǔn)確獲取信息是當(dāng)今社會要解決的關(guān)鍵問題之一。隨著之家用戶體量和內(nèi)容規(guī)模的不斷增大,傳統(tǒng)的靠"主動拉"獲取信息的方式已不能滿足用
  • 如何通過Python線程池實現(xiàn)異步編程?

    線程池的概念和基本原理線程池是一種并發(fā)處理機(jī)制,它可以在程序啟動時創(chuàng)建一組線程,并將它們置于等待任務(wù)的狀態(tài)。當(dāng)任務(wù)到達(dá)時,線程池中的某個線程會被喚醒并執(zhí)行任務(wù),執(zhí)行完任
  • 三言兩語說透柯里化和反柯里化

    JavaScript中的柯里化(Currying)和反柯里化(Uncurrying)是兩種很有用的技術(shù),可以幫助我們寫出更加優(yōu)雅、泛用的函數(shù)。本文將首先介紹柯里化和反柯里化的概念、實現(xiàn)原理和應(yīng)用
  • 一個注解實現(xiàn)接口冪等,這樣才優(yōu)雅!

    場景碼猿慢病云管理系統(tǒng)中其實高并發(fā)的場景不是很多,沒有必要每個接口都去考慮并發(fā)高的場景,比如添加住院患者的這個接口,具體的業(yè)務(wù)代碼就不貼了,業(yè)務(wù)偽代碼如下:圖片上述代碼有
  • 四年持續(xù)更迭堅持探索行業(yè)無人之境,HarmonyOS 4帶來五大升級多項創(chuàng)新

    除了華為每年新發(fā)布的旗艦手機(jī)系列,上億花粉更加期待鴻蒙系統(tǒng)每次的跨版本大更新。8月4日,HarmonyOS 4于HDC 2023正式發(fā)布,這也是該系統(tǒng)歷經(jīng)四年的再
  • iQOO Neo8 Pro真機(jī)諜照曝光:天璣9200+和V1+旗艦雙芯加持

    去年10月,iQOO推出了iQOO Neo7系列機(jī)型,不僅搭載了天璣9000+,而且是同價位唯一一款天璣9000+直屏旗艦,一經(jīng)上市便受到了用戶的廣泛關(guān)注。在時隔半年后,
Top 日韩成人免费在线_国产成人一二_精品国产免费人成电影在线观..._日本一区二区三区久久久久久久久不
玖玖综合伊人| 99精品国产一区二区青青牛奶| 国产精品久久久免费| 国产毛片久久| 亚洲成人在线| 在线视频欧美日韩| 欧美在线观看视频在线| 欧美成人免费小视频| 欧美日韩精品国产| 国产日韩欧美亚洲| 亚洲巨乳在线| 久久大香伊蕉在人线观看热2| 欧美成人免费网站| 国产酒店精品激情| 亚洲欧洲在线播放| 香蕉国产精品偷在线观看不卡| 欧美gay视频激情| 国产精品视频福利| 亚洲欧洲日韩在线| 欧美中文字幕视频| 欧美日韩理论| 影音先锋久久资源网| 亚洲一区二区三区四区视频 | 欧美激情亚洲综合一区| 国产欧美一区二区精品性色| 亚洲精品女人| 久久九九免费| 国产精品女人久久久久久| 亚洲激情国产精品| 欧美在线播放| 欧美视频免费在线观看| 亚洲高清视频一区| 欧美在线播放高清精品| 欧美三级电影大全| 亚洲激情六月丁香| 久久精品国产一区二区三| 国产精品国产a级| 亚洲人成人99网站| 久久精品一二三区| 国产精品一二三视频| 艳女tv在线观看国产一区| 麻豆91精品| 国产日韩欧美麻豆| 亚洲天堂免费观看| 欧美久久久久久| 亚洲福利国产精品| 欧美在线视频观看| 国产精品色婷婷久久58| 夜夜嗨一区二区| 欧美极品一区| 亚洲国产欧美国产综合一区 | 免费看亚洲片| 韩国成人精品a∨在线观看| 亚洲欧美区自拍先锋| 欧美日韩一二三区| 亚洲精品国精品久久99热| 理论片一区二区在线| 国产专区综合网| 欧美一区二区三区免费视频| 国产精品嫩草99a| 亚洲特色特黄| 欧美午夜性色大片在线观看| 日韩一级在线观看| 欧美精品激情在线| 亚洲精品一区二区在线观看| 欧美成人午夜免费视在线看片| 1000部精品久久久久久久久| 久久嫩草精品久久久精品一| 国产欧美一区二区精品秋霞影院 | 夜夜爽夜夜爽精品视频| 欧美美女视频| 一本大道久久a久久精品综合| 欧美精品在线播放| 日韩网站在线| 欧美日韩一区二区在线播放| 99国产一区| 欧美日韩一区二区三区免费看| 99精品免费| 欧美丝袜一区二区三区| 亚洲网站啪啪| 国产精品美女一区二区| 亚洲欧美日韩系列| 国产一级精品aaaaa看| 久久国产精品99精品国产| 国产一区二区三区黄视频| 久久国产婷婷国产香蕉| 国产在线精品二区| 麻豆精品精华液| 亚洲精品久久久久久久久| 欧美理论电影在线播放| 亚洲午夜精品久久| 国产精品视频一| 欧美伊人久久久久久久久影院 | 国产精品久久久久久福利一牛影视| 亚洲一区二区三区午夜| 国产麻豆9l精品三级站| 久久精品国产亚洲a| 在线成人性视频| 欧美另类综合| 亚洲尤物影院| 国外成人在线视频| 欧美成人三级在线| 99ri日韩精品视频| 国产精品男gay被猛男狂揉视频| 久久国产精品毛片| 亚洲二区在线视频| 欧美日韩国产在线播放| 亚洲制服欧美中文字幕中文字幕| 国产区在线观看成人精品| 狂野欧美激情性xxxx欧美| 亚洲精品无人区| 国产精品嫩草影院av蜜臀| 久久九九精品99国产精品| 亚洲激情电影在线| 国产精品a久久久久久| 久久大香伊蕉在人线观看热2| 亚洲高清一区二区三区| 欧美区二区三区| 欧美一区=区| 亚洲欧洲在线一区| 国产精品日韩一区二区三区| 久久综合给合久久狠狠色| 日韩一区二区电影网| 国产日韩一区二区三区在线播放| 美日韩精品视频免费看| 中文精品99久久国产香蕉| 国产一区深夜福利| 欧美日本二区| 欧美在线观看网址综合| 亚洲精品1区| 国产美女精品免费电影| 欧美成人综合在线| 欧美一区二区观看视频| 亚洲精品免费在线播放| 国产午夜精品久久| 欧美日本在线视频| 久久久99爱| 亚洲一区图片| 最新国产精品拍自在线播放| 国产伦理一区| 欧美日韩国产首页| 久久亚洲欧洲| 午夜在线精品偷拍| 亚洲免费电影在线| 国产在线精品成人一区二区三区| 欧美日本在线一区| 久久久久久久久一区二区| 正在播放亚洲| 亚洲国产日韩欧美在线图片| 国产伦精品一区二区三区在线观看 | 欧美日韩精品久久久| 久久久av网站| 亚洲午夜视频| 亚洲区在线播放| 国产一区美女| 国产精品久久综合| 欧美精品三级日韩久久| 久久久久久久尹人综合网亚洲| 亚洲一区二区av电影| 亚洲精品你懂的| 亚洲国产精品999| 国内精品免费在线观看| 国产精品腿扒开做爽爽爽挤奶网站| 欧美精品一区二区三区在线看午夜| 久久久亚洲精品一区二区三区| 午夜久久久久久| 亚洲一区二区免费看| 99视频精品免费观看| 亚洲精品久久久久久久久| 在线观看成人av电影| 国产一区再线| 国产欧美日韩在线观看| 国产精品成人一区二区网站软件| 欧美久久综合| 欧美国产第一页| 欧美xart系列高清| 老司机一区二区| 久久久综合精品| 久久精品一区蜜桃臀影院| 性一交一乱一区二区洋洋av| 亚洲一区美女视频在线观看免费| 夜夜狂射影院欧美极品| 亚洲美女黄网| 亚洲精选91| 亚洲日本视频| 亚洲日本免费电影| 亚洲经典三级| 91久久综合| 亚洲欧洲在线看| 亚洲精品免费在线| 亚洲免费av电影| 99视频在线观看一区三区| 日韩视频第一页| 99视频精品在线| 欧美视频日韩视频| 国产日本精品| 久久久久久久999精品视频| 亚洲美女中出| 国产精品久久福利| 久久精品在这里| 亚洲精品系列| 欧美视频日韩视频在线观看| 欧美freesex8一10精品| 激情视频一区二区三区|