国产探花免费观看_亚洲丰满少妇自慰呻吟_97日韩有码在线_资源在线日韩欧美_一区二区精品毛片,辰东完美世界有声小说,欢乐颂第一季,yy玄幻小说排行榜完本

首頁 > 學院 > 開發設計 > 正文

模板與泛型編程之模板實參推斷

2019-11-08 18:48:46
字體:
來源:轉載
供稿:網友

模板實參推斷過程中允許對函數實參進行的兩種類型轉換: (1) const 轉換:可以將一個非const對象的引用(或指針)傳遞給一個const的引用(或指針)形參。 (2)數組或函數指針轉換:如果函數形參不是引用類型,則可以對數組或函數類型的實參應用正常的指針轉換。一個數組實參可以轉換為一個指向其首元素的指針。類似的,一個函數實參可以轉換為一個函數類型的指針。

這里寫圖片描述

函數模板可以由用普通類型定義的參數。

這里寫圖片描述


指定顯式模板實參:

//編譯器無法推斷T1,它未出現在函數參數列表中template <typename T1, typename T2, typename T3>T1 sum(T2,T3);//T1是顯式指定的,T2和T3是函數實參類型推斷的。auto val3=sum<long long>(i, lng);//long long sum(int,long)

尾置返回類型與類型轉換:

這里寫圖片描述

為了獲得元素類型,我們可以使用標準庫的類型轉換模板。

這里寫圖片描述

例子:

這里寫圖片描述


當參數是一個函數模板實例的地址時,程序上下文必須滿足:對每個模板參數,能唯一確定其類型或值。

這里寫圖片描述

這里寫圖片描述


從左值引用函數參數推斷類型:

當一個函數參數是模板類型參數的一個普通(左值)引用時,綁定規則告訴我們,只能傳遞給它一個左值。實參可以是const類型,也可以不是。如果實參是const,則T被推斷成const類型.

這里寫圖片描述

如果一個函數參數的類型是const T&,正常的綁定規則告訴我們可以傳遞它任何類型的實參–一個對象,一個臨時對象或是一個字面常量值。當函數參數本身是const時,T的類型推斷的結果不會是一個const類型。const已經是函數參數類型的一部分:因此,它不會也是模板參數類型的一部分。

這里寫圖片描述

從右值引用函數參數推斷類型:

當一個函數參數是一個右值引用時,正常綁定規則告訴我們可以傳遞給它一個右值。推斷出的T的類型是該右值實參的類型:

template <typename T> void f3(T&&);f3(42);//實參是一個int類型的右值;模板參數T是int

c++語言正常綁定兩個例外規則: (1)當我們將一個左值(i)傳遞給函數的右值引用參數,且此右值引用指向模板類型參數(T&&),編譯器推斷模板類型參數為實參的左值引用類型。 (2)如果我們直接創建一個引用的引用,則這些引用形成了“折疊”。在所有情況下(除了一個例外),引用會折疊成一個普通的左值引用類型。在新標準中,折疊規則則擴展到右值引用。只有一種特殊情況會折疊成右值引用:右值引用的右值引用。即

(1)X& &,X& &&和X&& &都折疊成類型X& (2)類型X&& &&折疊成X&&



發表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發表
主站蜘蛛池模板: 商水县| 海宁市| 中宁县| 丰镇市| 涟水县| 河东区| 延长县| 黑龙江省| 贡嘎县| 永城市| 万州区| 龙海市| 庆云县| 西乌珠穆沁旗| 阿合奇县| 和龙市| 遂平县| 尉氏县| 大同县| 溆浦县| 通渭县| 广宗县| 兴业县| 屏东市| 新巴尔虎左旗| 瑞安市| 泗水县| 广东省| 福贡县| 合江县| 巧家县| 潞西市| 灵璧县| 太原市| 读书| 西丰县| 景德镇市| 当雄县| 邵阳县| 宕昌县| 桃江县|