摘要:四追蹤返回類型宋體聲明該筆記是在學(xué)習(xí)深入理解高級(jí)編程程序庫探秘時(shí)做的總結(jié),方便以后鞏固復(fù)習(xí)引入追蹤返回類型的目的宋體追蹤返回類型配合與會(huì)真正釋放中泛型編程的能力簡(jiǎn)化函數(shù)的定義,提高代碼的可讀性。
聲明:該筆記是在學(xué)習(xí)《深入理解C++11》、《C++11/14高級(jí)編程 Boost程序庫探秘》時(shí)做的總結(jié),方便以后鞏固復(fù)習(xí)!
追蹤返回類型配合auto
與decltype
會(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á)
式中的t1
和t2
都未聲明;而變量使用前必須已經(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è)基本元素。
參數(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
摘要:的前位數(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 ...
摘要:零前期準(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)介 ...
摘要:那個(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...
閱讀 1212·2021-11-17 09:33
閱讀 3622·2021-09-28 09:42
閱讀 3352·2021-09-13 10:35
閱讀 2512·2021-09-06 15:00
閱讀 2453·2021-08-27 13:12
閱讀 3619·2021-07-26 23:38
閱讀 1863·2019-08-30 15:55
閱讀 549·2019-08-30 15:53