C++学习记录-模板-函数模板与普通函数的区别和调用规则

一、区别

  1. 普通函数调用时可以发生自动类型转换(隐藏式类型转换)
  2. 函数模板调用时,如果利用自动类型推导,则不能发生隐式类型转换
    • 模板必须在推导出相同的数据类型时才能使用
  3. 如果利用显示指定类型的方式,则可以发生隐式类型转换

二、示例:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
int add(int a,int b)
{
return a+b;
}
//这是一个普通函数

template<typename T>
T add2(T a,T b)
{
return a+b;
}
//这是一个函数模板

int main()
{
int a=10;
char b='a';

add(a,b);//正确,char类型的b传入时会转换成int类型(取ASCII码),发生了隐式转换

add2(a,b);//错误,必须推导出相同的数据类型才可以使用

add2<int>(a,b);//正确,利用显示指定类型,可以发生隐式类型转换
}