#include函数模板和普通函数的判断#include using namespace std; //函数模板(申明和定义必须在一个源文件) template //类型别名 T max(T a, T b) { return a > b ? a : b; } int main() { cout << max (12, 34) << endl; int(*maxint)(int, int) = &max;//函数指针 cout << maxint << endl; cout << max (12.99, 12.88) << endl; double(*max1)(double, double) = &max; cout << max1 << endl; cout << max ("hello", "world") << endl; system("pause"); }
#include#include using namespace std; template T const &max(T const& a, T const& b) { cout << "T T" << endl; return a > b ? a : b; } template T *const &max(T* const& a, T* const& b) { cout << "T* T*" << endl; return a > b ? a : b; } const char* const &max(const char* const&a,const char* const&b) { cout << "const char* const&" << endl; return strcmp(a,b)>0?a:b; } template T const &max(T const& a, T const& b, T const& c) { cout << "T T T" << endl; return map(map(a,b),c)); } // cout << "T T" << endl; 1 //cout << "T* T*" << endl; 2 //cout << "const char* const&" << endl; 3 //cout << "T T T" << endl; 4 int main() { char*const a = "abc"; char*const b = "efg"; char*const c = "vd"; //编译器优先普通函数不是函数模板,除非函数模板提出最匹配 max(a, b); //3 max(10, 20); //1 max((char*)a, b); //3 max((char*)a, (char*)b); //2 max(a, b, c); max<>(a, b);//带<>必须从函数模板中选择 3 //为什么不选择2是因为会加上char*这样就成了二级指针不匹配 max (a, b);//带 选择 1 system("pause"); }



