摘要:四追蹤返回類型宋體聲明該筆記是在學習深入理解高級編程程序庫探秘時做的總結,方便以后鞏固復習引入追蹤返回類型的目的宋體追蹤返回類型配合與會真正釋放中泛型編程的能力簡化函數的定義,提高代碼的可讀性。
聲明:該筆記是在學習《深入理解C++11》、《C++11/14高級編程 Boost程序庫探秘》時做的總結,方便以后鞏固復習!
追蹤返回類型配合auto
與decltype
會真正釋放C++11中泛型編程的能力;簡化函數的定義,提高代碼的可讀性。
使用decltype
對返回類型進行類型推導書寫方式如下:
template<typename T1, typename T2>decltype(t1 + t2) Sum(T1 & t1, T2 & t2) { return t1 + t2;}
這樣的寫法雖然看似不錯,不過對編譯器來說有些小問題。編譯器在推導
decltype(t1 + t2)
時的,表達
式中的t1
和t2
都未聲明;而變量使用前必須已經聲明。
為了解決變量使用前必須已經聲明這個問題,C++11引入了新語法——追蹤返回類型
,來聲明和定義這樣的函數
template<typename T1, typename T2>auto Sum(T1 & t1, T2 & t2) -> decltype(t1 + t2){ return t1 + t2;}
把函數的返回值移至參數聲明之后,復合符號
-> decltype(t1 + t2)
被稱為追蹤返回類型
。而原本函數返回值的位置由auto
關鍵字占據。這樣,我們就可以讓編譯器來推導Sum函數模板的返回類型了。而auto占位符
和->return_type
也就是構成追蹤返回類型函數的兩個基本元素。
參數的類型和返回值都可在實例化時再確定
#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
定義了兩個模板函數Sum和Mul,它們的參數的類型和返回值都在實例化時決定。而由于main函數中還使用了auto,整個例子中沒有看到一個“具體”的類型聲明。
auto 會追蹤 decltype() 推導出的類型。
可以關注公眾號:Kevin的嵌入式學習站,整理不易,但您的點贊、關注、收藏就是對我最大的鼓勵!
文章版權歸作者所有,未經允許請勿轉載,若此文章存在違規行為,您可以聯系管理員刪除。
轉載請注明本文地址:http://specialneedsforspecialkids.com/yun/123612.html
摘要:的前位數用來表示線程的數量,后面三位用來表示線程池的狀態。線程池的狀態有五種,分別是,根據單詞就能猜出大概。并且為了考慮性能問題,線程池的設計沒有使用悲觀鎖關鍵字,而是大量使用了和機制。 零 前期準備 0 FBI WARNING 文章異常啰嗦且繞彎。 1 版本 JDK 版本 : OpenJDK 11.0.1 IDE : idea 2018.3 2 ThreadPoolExecutor ...
摘要:零前期準備文章異常啰嗦且繞彎。版本版本簡介是中默認的實現類,常與結合進行多線程并發操作。所以方法的主體其實就是去喚醒被阻塞的線程。本文僅為個人的學習筆記,可能存在錯誤或者表述不清的地方,有緣補充 零 前期準備 0 FBI WARNING 文章異常啰嗦且繞彎。 1 版本 JDK 版本 : OpenJDK 11.0.1 IDE : idea 2018.3 2 ThreadLocal 簡介 ...
摘要:那個配置文件將來自應用程序的信息以格式記錄到文件中。以下清單顯示了使用的集成測試設置代碼添加到項目本節介紹如何使用或將添加到項目中。以下示例顯示了如何為執行此操作建議你通過添加依賴關系管理,這樣你就無需自行管理版本。 Spring Cloud Sleuth介紹 Spring Cloud Sleuth為Spring Cloud實現了分布式追蹤解決方案。 術語 Spring Cloud S...
閱讀 1203·2021-11-17 09:33
閱讀 3599·2021-09-28 09:42
閱讀 3326·2021-09-13 10:35
閱讀 2477·2021-09-06 15:00
閱讀 2437·2021-08-27 13:12
閱讀 3609·2021-07-26 23:38
閱讀 1825·2019-08-30 15:55
閱讀 539·2019-08-30 15:53