模板進階——模板實參推斷

一、關鍵點

模板實參:模板參數T的實例類型,如int、string等

模板實參推斷:從函數實參來確定模板實參的過程

模板類型參數與類型轉換:const的轉換、數組/函數到指針的轉換

顯式模板實參:當模板參數類型并未出現在函數參數列表時

通過函數指針推斷模板實參:函數指針的類型決定了模板實參的類型

?

二、模板類型參數可以運用的類型轉換

template <typename T> void func1(T, T);
template <typename T> void func2(const T&, const T&); int main()
{	string s1 = "hello";const string s2 = "aloha";func1(s1, s2);		//s2的頂層const將被忽略,調用func1(string, string) func2(s1, s2);		//將s1轉換為const是允許的,調用func2(const string&, const string&) int a[5], b[10];func1(a, b);		//調用func1(int*, int*)func2(a, b);		//錯誤:形參是引用,數組不會轉換為指針 
}

小結:頂層const無論是在形參中還是在實參中,都會被忽略

小結:允許將一個非const對象的引用(或指針)傳遞給一個const對象的引用或指針

小結:如果函數參數不是引用類型,則可以對數組或函數類型的實參應用正常的指針轉換

注:函數參數列表中的正常類型的類型轉換不受模板影響

?

三、函數模板顯式實參

1. 編譯器無法推斷出模板實參的情況:

template <typename T1, typename T2, typename T3>
T1 sum(T2, T3);		//T1的類型無法判斷auto ans = sum<long>(2, 3.14);	//T1顯式指定為long

注:顯示模板實參按由左至右的順序與對應的模板參數匹配

注:只有右邊的顯式模板參數可以省略(如T2、T3,它們可以從函數參數推斷出來)

2. 正常類型轉換可以應用于顯式指定的實參

template <typename T>
bool cmp(const T&, const T&); int main()
{	long a;compare(a, 1024);		//錯誤compare<int>(a, 1024);	//a被轉換為intcompare<long>(a, 1024);	//1024被轉換為long 
}

?

轉載于:https://www.cnblogs.com/xzxl/p/7856629.html

本文來自互聯網用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務,不擁有所有權,不承擔相關法律責任。
如若轉載,請注明出處:http://www.pswp.cn/news/392687.shtml
繁體地址,請注明出處:http://hk.pswp.cn/news/392687.shtml
英文地址,請注明出處:http://en.pswp.cn/news/392687.shtml

如若內容造成侵權/違法違規/事實不符,請聯系多彩編程網進行投訴反饋email:809451989@qq.com,一經查實,立即刪除!

相關文章

leetcode 973. 最接近原點的 K 個點(排序)

我們有一個由平面上的點組成的列表 points。需要從中找出 K 個距離原點 (0, 0) 最近的點。 &#xff08;這里&#xff0c;平面上兩點之間的距離是歐幾里德距離。&#xff09; 你可以按任何順序返回答案。除了點坐標的順序之外&#xff0c;答案確保是唯一的。 示例 1&#xf…

ios 打開揚聲器

[[UIDevice currentDevice] setProximityMonitoringEnabled:YES]; AVAudioSession *audioSession [AVAudioSession sharedInstance]; //默認情況下揚聲器播放 [audioSession setCategory:AVAudioSessionCategoryPlayback withOptions:AVAudioSessionCategoryOptionMixWithOthe…

sqlserver 批量處理數據

目前我覺得有兩種方法可以用作批量數據的處理&#xff0c;也算比較靠譜的吧&#xff1a;sqlbulkcopy 和利用表值函數。 1.sqlbulkcopy是dotnet中的一個用來處理大批量插入數據的&#xff0c;具體用法如下&#xff1a; using (SqlConnection conSave new SqlConnection(Config.…

區塊鏈編程語言_區塊鏈開發中使用的最受歡迎的編程語言

區塊鏈編程語言by Michael Draper通過邁克爾德雷珀(Michael Draper) We’re currently in the midst of a new burgeoning industry with blockchain development.我們目前正處于區塊鏈開發的新興行業中。 Blockchain technology is very much in a nascent stage, however t…

vscode 模糊部分代碼_本周 GitHub 速覽:您的代碼有聲兒嗎?(Vol.38)

作者&#xff1a;HelloGitHub-小魚干摘要&#xff1a;還記得花式夸贊程序員的彩虹屁插件 vscode-rainbow-fart 嗎&#xff1f;它后續有人啦&#xff01;JazzIt 同它的前輩 vscode-rainbow-fart 一樣&#xff0c;是一個能讓代碼“發聲”的工具&#xff0c;它會在腳本運行成功或者…

有趣的鏈接

1行命令實現人臉識別&#xff1a;https://linux.cn/article-9003-1.html轉載于:https://blog.51cto.com/10704527/1983007

webpack基礎使用Loader(三)

loaders:[ { test:/\.js$/, loader:babel-loader, exclude:__dirname"/node_modules/", //排除打包的范圍&#xff08;需要絕對路徑&#xff09; include:__dirname"src",//指定打包的范圍&#xff08;需要絕對路徑&#xff09; query:{ …

Flutter VS React Native –為什么我認為Flutter最適合移動應用程序開發

This isn’t the type of article you might think it’s going to be. I’m not going to list the pros and cons of every framework and I am not going to do a comparative analysis of performance. 這不是您可能會想到的文章類型。 我不會列出每個框架的優缺點&#xf…

python 2.7 error: Microsoft Visual C++ 9.0 is required

參考&#xff1a;https://stackoverflow.com/questions/43645519/microsoft-visual-c-9-0-is-required 解決方法&#xff1a; 下載并安裝Microsoft Visual C Compiler for Python 2.7&#xff1a; Microsoft Visual C Compiler for Python 2.7 轉載于:https://www.cnblogs.com/…

python內置支持集合運算嗎_Python中的集合支持交、并運算

Python中的集合支持交、并運算答&#xff1a;√新冠肺炎患者潛伏期的傳染性最強答&#xff1a;對在運動的組接中&#xff0c;鏡頭組接一個基本的原則是()、()。答&#xff1a;動接動 靜接靜在中指背,距指甲根中點1分許稱答&#xff1a;老龍庫存控制屬于生產管理而不是物流管理的…

C語言遞歸實現二叉樹(二叉鏈表)的三種遍歷和銷毀操作(實驗)

今天寫的是二叉樹操作的實驗&#xff0c;這個實驗有三個部分&#xff1a; ①建立二叉樹&#xff0c;采用二叉鏈表結構 ②先序、中序、后續遍歷二叉樹&#xff0c;輸出節點值 ③銷毀二叉樹 二叉樹的節點結構定義 typedef struct BiTNode //二叉樹的節…

OC extern和變量

注意&#xff1a; extern只能用來聲明全部變量&#xff0c;不能拿來定義變量 #include <stdio.h>// 第一種做法是將a定義在main函數的前面 // int a;// 完整地聲明全部變量a // extern int a;// extern是可以省略的 int a;int a;int a;int a;void test();int main(int ar…

leetcode514. 自由之路(dp)

電子游戲“輻射4”中&#xff0c;任務“通向自由”要求玩家到達名為“Freedom Trail Ring”的金屬表盤&#xff0c;并使用表盤拼寫特定關鍵詞才能開門。 給定一個字符串 ring&#xff0c;表示刻在外環上的編碼&#xff1b;給定另一個字符串 key&#xff0c;表示需要拼寫的關鍵…

java實現遞歸算法_如何在Java中實現二進制搜索算法而無需遞歸

java實現遞歸算法by javinpaul由javinpaul 流行的二進制搜索算法的迭代實現&#xff0c;用于在排序數組中查找元素。 (An Iterative implementation of the popular binary search algorithm to find an element in a sorted array.) Hello everyone! I have published a lot …

Django 入門項目案例開發(中)

關注微信公眾號&#xff1a;FocusBI 查看更多文章&#xff1b;加QQ群&#xff1a;808774277 獲取學習資料和一起探討問題。 昨天已經描述了如何搭建Django的開發環境&#xff0c;今天描述業務流程&#xff0c;具體我們要實現一個什么樣的業務&#xff1b; 以下的業務都是假設的…

縱橫公路造價軟件學習_通遼分公司組織開展2020年 養護工程造價預算培訓

為進一步提高養護員工業務水平和業務素質&#xff0c;提升熟練掌握信息化公路工程造價預算&#xff0c;11月5日&#xff0d;11月8日期間,通遼分公司組織開展了2020年養護工程造價預算培訓。養護科全體人員、基層所站統計人員共計16人參加培訓。本次培訓邀請了縱橫公路工程造價管…

java 生成二維碼

一步一步用 java 設計生成二維碼 轉至 http://blog.sina.com.cn/s/blog_5a6efa330102v1lb.html 在物聯網的時代&#xff0c;二維碼是個很重要的東西了&#xff0c;現在無論什么東西都要搞個二維碼標志&#xff0c;唯恐落伍&#xff0c;就差人沒有用二維碼識別了。也許有一天生分…

leetcode 922. 按奇偶排序數組 II(雙指針)

給定一個非負整數數組 A&#xff0c; A 中一半整數是奇數&#xff0c;一半整數是偶數。 對數組進行排序&#xff0c;以便當 A[i] 為奇數時&#xff0c;i 也是奇數&#xff1b;當 A[i] 為偶數時&#xff0c; i 也是偶數。 你可以返回任何滿足上述條件的數組作為答案。 示例&a…

機器學習 深度學習 ai_如何突破AI炒作成為機器學習工程師

機器學習 深度學習 aiI’m sure you’ve heard of the incredible artificial intelligence applications out there — from programs that can beat the world’s best Go players to self-driving cars.我敢肯定&#xff0c;您已經聽說過令人難以置信的人工智能應用程序-從可…

arcgis插值不覆蓋區劃圖_ArcGIS繪圖—空氣質量站點數據插值繪制等值線圖

作者&#xff1a;吳琳&#xff1b;陳天舒&#xff0c;山東大學環境科學&#xff08;大氣化學&#xff09;博士在讀數據&#xff08;Excel格式&#xff09;&#xff1a;多站點污染物數據&#xff08;國&#xff0c;省&#xff0c;市控點&#xff09;&#xff0c;站點經緯度信息繪…