成人国产在线小视频_日韩寡妇人妻调教在线播放_色成人www永久在线观看_2018国产精品久久_亚洲欧美高清在线30p_亚洲少妇综合一区_黄色在线播放国产_亚洲另类技巧小说校园_国产主播xx日韩_a级毛片在线免费

資訊專欄INFORMATION COLUMN

四、C++11新特性:追蹤返回類型

tianyu / 1211人閱讀

摘要:四追蹤返回類型宋體聲明該筆記是在學(xué)習(xí)深入理解高級(jí)編程程序庫探秘時(shí)做的總結(jié),方便以后鞏固復(fù)習(xí)引入追蹤返回類型的目的宋體追蹤返回類型配合與會(huì)真正釋放中泛型編程的能力簡(jiǎn)化函數(shù)的定義,提高代碼的可讀性。

四、追蹤返回類型

聲明:該筆記是在學(xué)習(xí)《深入理解C++11》、《C++11/14高級(jí)編程 Boost程序庫探秘》時(shí)做的總結(jié),方便以后鞏固復(fù)習(xí)!

1、引入追蹤返回類型的目的:

追蹤返回類型配合autodecltype會(huì)真正釋放C++11中泛型編程的能力;簡(jiǎn)化函數(shù)的定義,提高代碼的可讀性。

使用decltype對(duì)返回類型進(jìn)行類型推導(dǎo)書寫方式如下:

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

這樣的寫法雖然看似不錯(cuò),不過對(duì)編譯器來說有些小問題。編譯器在推導(dǎo)decltype(t1 + t2)時(shí)的,表達(dá)
式中的t1t2都未聲明;而變量使用前必須已經(jīng)聲明。

為了解決變量使用前必須已經(jīng)聲明這個(gè)問題,C++11引入了新語法——追蹤返回類型,來聲明和定義這樣的函數(shù)

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

把函數(shù)的返回值移至參數(shù)聲明之后,復(fù)合符號(hào)-> decltype(t1 + t2)被稱為追蹤返回類型。而原本函數(shù)返回值的位置由auto關(guān)鍵字占據(jù)。這樣,我們就可以讓編譯器來推導(dǎo)Sum函數(shù)模板的返回類型了。而auto占位符->return_type也就是構(gòu)成追蹤返回類型函數(shù)的兩個(gè)基本元素。

2、使用追蹤返回類型的函數(shù)

參數(shù)的類型和返回值都可在實(shí)例化時(shí)再確定

#include using namespace std;template<typename T1, typename T2>auto Sum(const T1 & t1, const T2 & t2) -> decltype(t1 + t2){	return t1 + t2;}template <typename T1, typename T2>auto Mul(const T1 & t1, const T2 & t2) -> decltype(t1 * t2){	return t1 * t2;}int main(){	auto a = 3;    auto b = 4L;    auto pi = 3.14;    auto c = Sum(a, b);    cout << "d = " << c << endl;       auto d = Mul(c, pi);    cout << "d = " << d << endl;   }        

輸出:

d = 7d = 21.98

定義了兩個(gè)模板函數(shù)Sum和Mul,它們的參數(shù)的類型和返回值都在實(shí)例化時(shí)決定。而由于main函數(shù)中還使用了auto,整個(gè)例子中沒有看到一個(gè)“具體”的類型聲明。
auto 會(huì)追蹤 decltype() 推導(dǎo)出的類型。

可以關(guān)注公眾號(hào):Kevin的嵌入式學(xué)習(xí)站,整理不易,但您的點(diǎn)贊、關(guān)注、收藏就是對(duì)我最大的鼓勵(lì)!

文章版權(quán)歸作者所有,未經(jīng)允許請(qǐng)勿轉(zhuǎn)載,若此文章存在違規(guī)行為,您可以聯(lián)系管理員刪除。

轉(zhuǎn)載請(qǐng)注明本文地址:http://systransis.cn/yun/123612.html

相關(guān)文章

  • 追蹤解析 ThreadPoolExecutor 源碼

    摘要:的前位數(shù)用來表示線程的數(shù)量,后面三位用來表示線程池的狀態(tài)。線程池的狀態(tài)有五種,分別是,根據(jù)單詞就能猜出大概。并且為了考慮性能問題,線程池的設(shè)計(jì)沒有使用悲觀鎖關(guān)鍵字,而是大量使用了和機(jī)制。 零 前期準(zhǔn)備 0 FBI WARNING 文章異常啰嗦且繞彎。 1 版本 JDK 版本 : OpenJDK 11.0.1 IDE : idea 2018.3 2 ThreadPoolExecutor ...

    gaomysion 評(píng)論0 收藏0
  • 追蹤解析 FutureTask 源碼

    摘要:零前期準(zhǔn)備文章異常啰嗦且繞彎。版本版本簡(jiǎn)介是中默認(rèn)的實(shí)現(xiàn)類,常與結(jié)合進(jìn)行多線程并發(fā)操作。所以方法的主體其實(shí)就是去喚醒被阻塞的線程。本文僅為個(gè)人的學(xué)習(xí)筆記,可能存在錯(cuò)誤或者表述不清的地方,有緣補(bǔ)充 零 前期準(zhǔn)備 0 FBI WARNING 文章異常啰嗦且繞彎。 1 版本 JDK 版本 : OpenJDK 11.0.1 IDE : idea 2018.3 2 ThreadLocal 簡(jiǎn)介 ...

    xcc3641 評(píng)論0 收藏0
  • Spring Cloud 參考文檔(Spring Cloud Sleuth介紹)

    摘要:那個(gè)配置文件將來自應(yīng)用程序的信息以格式記錄到文件中。以下清單顯示了使用的集成測(cè)試設(shè)置代碼添加到項(xiàng)目本節(jié)介紹如何使用或?qū)⑻砑拥巾?xiàng)目中。以下示例顯示了如何為執(zhí)行此操作建議你通過添加依賴關(guān)系管理,這樣你就無需自行管理版本。 Spring Cloud Sleuth介紹 Spring Cloud Sleuth為Spring Cloud實(shí)現(xiàn)了分布式追蹤解決方案。 術(shù)語 Spring Cloud S...

    impig33 評(píng)論0 收藏0

發(fā)表評(píng)論

0條評(píng)論

最新活動(dòng)
閱讀需要支付1元查看
<