您的位置:首页 > 其它

函数模板

2015-10-05 10:02 316 查看
/*

1 函数模板可以像普通函数一样被重载

2 C++编译器优先考虑匹配普通函数

3 如果函数模板可以产生一个更好更精确的匹配,那么选择模板

4 可以通过空模板实参列表的语法限定编译器只匹配模板函数

*/

/*

函数模板不允许自动类型转化,隐式的类型转换编译器会报错

普通函数能够进行自动类型转换

*/

#include <iostream>
using std::cout;
using std::cin;
using std::endl;

int Max(int a, int b)
{
cout << "int Max(int a, int b)" << endl;
return a > b ? a : b;
}

template<typename T>
T Max(T a, T b)
{
cout << "T Max(T a, T b)" << endl;
return a > b ? a : b;
}

template<typename T>
T Max(T a, T b, T c)
{
cout << "T Max(T a, T b, T c)" << endl;
return Max(Max(a, b), c);
}

void main()
{
cout << Max(1, 3) << endl;//优先匹配普通函数
cout << Max<>(2, 4) << endl;//显式告知编译器,只匹配模板函数

cout << Max(3.0, 4.0) << endl;

cout << Max(5.0, 6.0, 7.0) << endl;

cout << Max('a', 80) << endl;

cin.get();
return;
}


函数模板的深入理解

1.编译器并不是提前把函数模板处理成能够处理任意类型的函数,这样效率很低
2.编译器编译期间,通过函数模板参数,生成不同类型的函数


编译器会对函数模板进行两次编译

―在声明的地方对模板代码本身进行编译

―在调用的地方对参数替换后的代码进行编译
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: