C++面向对象入门(三十九)函数模板及其重载函数调用优先级
函数模板及其重载函数根据类型匹配顺序
1 首先寻找和使用最符合函数名和参数类型的特定模板函数, 找到则调用
2 其次寻找一个函数模板, 将其实例化产生一个匹配的模板函数, 找到则调用
3 再其次寻找可以通过类型转换进行参数匹配的函数模板实例化产生的一个匹配的模板函数, 找到则调用
4 找不到, 编译报错
代码示例:
#include <iostream> using namespace std; /* 函数模板及其重载函数根据类型匹配顺序 1 首先寻找和使用最符合函数名和参数类型的特定模板函数, 找到则调用 2 其次寻找一个函数模板, 将其实例化产生一个匹配的模板函数, 找到则调用 3 再其次寻找可以通过类型转换进行参数匹配的函数模板实例化产生的一个匹配的模板函数, 找到则调用 4 找不到, 编译报错 */ template<typename T> void func(T t1, T t2) { cout << "template function" << endl; } //void func(float a,int b) //{ // cout << "normal function" << endl; //} void func(int a, int b) { cout << a << "" << b << endl; cout << "special normal function" << endl; } int main() { //首先寻找和使用最符合函数名和参数类型的特定模板函数, 找到则调用 func(1, 1); //其次寻找一个函数模板, 将其实例化产生一个匹配的模板函数, 找到则调用 func(2.1f, 2.0f); //再其次寻找可以通过类型转换进行参数匹配的函数模板实例化产生的一个匹配的模板函数, 找到则调用 func(2.1f,2); func(2, 2.1f); //再无匹配的的函数, 编译报错 string s = "aaa"; //func(2, s); //没有与参数列表匹配的重载函数'func'实例 //参数类型为(int,std::string) system("pause"); }
路漫漫其修远兮,吾将上下而求索。