C++函数模板和普通函数的调用规则:
-
普通函数可以进行自动类型转换。
-
函数模板必须严格类型匹配。
-
C++编译器优先考虑普通函数。
-
如果函数模板可以产生一个更好的匹配,那么选择模板。
-
可以通过空模板实参列表的语法限定编译器只能通过模板匹配。
代码如下:
#include <iostream>
using namespace std;template<typename T>
int myAdd(T a, T b)
{cout << "template function" << endl;return a + b;
}int myAdd(char a, char b)
{cout << "normal function" << endl;return a + b;
}void test01()
{int a = 10;int b = 20;char c1 = 'a';char c2 = 'b';myAdd(a, c1);myAdd(a, b);myAdd(c1, b);myAdd(a, b);myAdd(c1, c2);myAdd<>(c1, c2);
}int main()
{test01();return 0;
}
测试结果: