C++ Primer 5th笔记(chap 16 模板和泛型编程)模板实参推断
生活随笔
收集整理的這篇文章主要介紹了
C++ Primer 5th笔记(chap 16 模板和泛型编程)模板实参推断
小編覺得挺不錯的,現在分享給大家,幫大家做個參考.
1. 模板實參推斷( template argument deduction)
在模板實參推斷過程中, 編譯器使用函數調用中的實參類型來尋找模板實參, 用這些模板實參生成的函數版本與給定的函數調用最為匹配。
1.1 實參類型轉換
如果一個函數形參的類型使用了模板類型參數, 那么它采用特殊的初始化規則。 類型轉換:
- const轉換。可以將一個非const對象的指針或者引用傳遞給一個const指針或者引用形參。
- 數組或函數指針轉換,如果函數形參不是引用類型,則可以對數組或者函數類型的實參應用正常的指針轉換
但是
- 編譯器通常不是對實參進行類型轉換,而是生成一個新的模板實例。
- 其他的類型轉換,如算術轉換,派生類向基類的轉換,以及用戶自定義的轉換,都不能應用于函數模板的實參。
1.2 使用相同模板參數類型的函數形參
一個模板類型參數可以用作多個函數形參的類型。 由于只允許有限的幾種類型轉換,因此傳遞給這些形參的實參必須具有相同的類型。 如果推斷出的類型不匹配, 則調用就是錯誤的。
eg, compare 函數接受兩個 const T &參數, 其實參必須是相同類型: long lng; compare (lng, 1024 ); / / 錯誤: 不能實例化 compare (long, int )- 解決方法:將函數模板定義為兩個類型參數:
1.3 正常類型轉換應用于普通函數實參
函數模板可以有用普通類型定義的參數, 即, 不涉及模板類型參數的類型。 這種函數實參不進行特殊處理; 它們正常轉換為對應形參的類型。
eg.
template <typename T> ostream Sprint (ostream &os, const T &obj ) {return os ? obj; }print (cout, 42 ); // 實例化 print (ostream&, int ) ofstream f ("output" ); print (f, 10); // 使用 print (ostream&, int ) ; 將 f 轉換為 ostream&總結
以上是生活随笔為你收集整理的C++ Primer 5th笔记(chap 16 模板和泛型编程)模板实参推断的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: C++ Primer 5th笔记(cha
- 下一篇: C++ Primer 5th笔记(cha