#include <iostream>
using namespace std;
inline int const & max(int const & a, int const & b)
{
cout << "inline int const & max\n";
return a > b ? a : b;
}
template <typename T>
inline T const & max(T const & a, T const & b)
{
cout << "inline T const & max\n";
return a > b ? a : b;
}
template <typename T>
inline T const & max(T const & a, T const & b , T const & c)
{
cout << "inline T const & max three\n";
return ::max(::max(a, b), c);
}
int main()
{
cout << 1 << endl; ::max(7, 42, 63);//max<int>
cout << 2 << endl; ::max(7.0, 42.0);// max<double>
cout << 3 << endl; ::max('a', 'b');// max<char>
cout << 4 << endl; ::max(7, 42);//int重載的非模板函數
cout << 5 << endl; ::max<>(7, 42);//max<int>
cout << 6 << endl; ::max<double>(7, 42);//max<double>
cout << 7 << endl; ::max('a', 42.7);//int重載的非模板函數
/*
一個非模板函數可以和一個同名的函數模板同時存在,而且該函數模板還可以被實例化爲這個非模板函數。
對於非模板函數和同名的函數模板,如果其他條件都是相同的話,那麼在調用的時候,重載解析過程就會
調用非模板函數,而不會從該模板產生出一個實例。
然而,如果模板可以產生出一個具有更好匹配的函數,那麼就選擇模板。
還可以顯示地只是一個空的模板實參列表,告訴編譯器,只有模板才能來匹配這個調用,而且所有的模板都
應該根據模板參數來調用實參演繹出來。
模板不允許自動類型裝換。
*/
}
函數模板的簡單使用
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.