template inline t const& max (t const& a, t const& b)
#include #include #include "max.hpp"輸出結果int main()
::max(1,2); //ok若兩個引數不正確,或者不支援模板定義的特性,編譯時則會出錯//::max(1,1.2);//wrong
::max(static_cast(4),4.1);//ok
template inline t1 const& max (t1 const& a, t2 const& b)示例
double i = 42.1;返回值是t1,所以返回是int型別,結果是42,出錯了std::cout << "max(7,i): " << ::max(7,i) << std::endl;
定義3個引數,第3個引數用於表示返回值型別
template inline t3 const& max (t1 const& a, t2 const& b)測試
double i = 42.1;返回正確的42.1std::cout << "max(7,i): " << ::max(7,i) << std::endl;
過載函式的最佳匹配遵循以下優先規則:
a、完全匹配時,普通函式優於模板函式及模板函式的特化版本
b、提公升轉換(如:char和short轉換為int,及float轉換為double)
c、標準轉換(如:int轉換為char,及long轉換為double)
d、使用者定義的轉換,如類宣告中定義的轉換。
加引用和const限定符之類的,屬於無關緊要的轉換,都可以認為是完全匹配,但是const優先順序應該是高於引用的,編譯器會優先嘗試轉換為const。
特別注意::max<>(7, 42);這句的寫法指定了需要呼叫模板的例項化。// maximum of two int values
inline int const& max (int const& a, int const& b)
// maximum of two values of any type
template inline t const& max (t const& a, t const& b)
// maximum of three values of any type
template inline t const& max (t const& a, t const& b, t const& c)
int main()
注意:自動型別轉換
::max('a', 42.7); 只適用於常規函式,'a』會完成自動型別轉換
#include #include #include // maximum of two values of any type注意每個過載函式必須存在著一定的差異.template inline t const& max (t const& a, t const& b)
// maximum of two pointers
template inline t* const& max (t* const& a, t* const& b)
// maximum of two c-strings
inline char const* const& max (char const* const& a,
char const* const& b)
int main ()
// maximum of two values of any type3引數的max呼叫的是2引數模板函式,而非最後定義的max非模板函式template inline t const& max (t const& a, t const& b)
// maximum of three values of any type
template inline t const& max (t const& a, t const& b, t const& c)
// because the following declaration comes
// too late:
// maximum of two int values
inline int const& max (int const& a, int const& b)
#include // note: reference parameterss是std:: string型別,而非char陣列,所以也出錯template inline t const& max (t const& a, t const& b)
int main()
#include // note: nonreference parameters只有最後乙個型別不符合的編譯不通過template inline t max (t a, t b)
int main()
**:
c template筆記 1 模板函式
template inline t const max t const a,t const b include include include max.hpp int main 輸出結果 max 1,2 ok max 1,1.2 wrong max static cast 4 4.1 ok 若兩個引...
c template筆記 1 模板函式
template inline t const max t const a,t const b include include include max.hpp int main 輸出結果 max 1,2 ok max 1,1.2 wrong max static cast 4 4.1 ok若兩個引數...
C template(模板)的使用
在c 中,針對於 泛型 的程式設計時,需要使用模板,泛型 任何資料型別。比如 做乙個同時支援int和double型的加法運算,並輸出。傳統的做法 include using namespace std int add int a,int b double add double a,double b ...