函数模板与函数重载

  当模板函数与普通函数发生重载的时候:

  普通函数的调用:可以进行隐式的类型转换

  调用模板函数:本质是类型参数化。将严格的按照类型进行匹配,不会进行自动类型转换。

  所以在模板函数与普通函数发生重载的时候,先看实参与形参是否严格对应,对应之后才可以直接调用模板函数,否则将在普通函数中直接进行隐式类型转换。

 

具体来说:

函数模板不允许自动类型转化

普通函数可以进行自动类型转化

 

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

2.c++编译器优先考虑普通函数

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

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

  

#include<iostream>
using namespace std;


template <typename T>
void myswap(T& a, T& b)//T相同要求函数的形参和实参类型要相同
{
    T c;
    c = a;
    a = b;
    b = c;
    cout << "模板调用" << endl;
}

//重载
void myswap(int a, char c)
{
    cout << "a:  " << a << " c: " << c << "普通函数" << endl; 
}
int main()
{
    int a = 10;
    char c = 'z';
    myswap(a, c);//普通函数的调用:可以进行隐式的类型转换

    myswap(c, a);//普通函数的调用:可以进行隐式的类型转换

    myswap(a, a);//调用模板函数:本质是类型参数化。将严格的按照类型进行匹配,不会进行自动类型转换


    system("pause");
    return 0;
}

  运行结果:

 

posted on 2020-09-24 21:10  龑覭  阅读(389)  评论(0编辑  收藏  举报