C++ 函数模板和函数重载同时出现如何调用

C++ 函数模板和函数重载同时出现如何调用

重点

  1. 函数模板不允许自动转换,普通函数可以进行自动类型转换
  2. 函数模板可以像普通函数一样被重载
  3. C++编译器优先考虑调用普通函数
  4. 如果函数模板可以产生一个更好的匹配,则选择模板函数
  5. 可以通过空模板实参列表的语法限定编译器只调用模板函数

示例

#include<iostream>
using namespace std;

//普通函数和模板函数  函数名相同  形成函数重载

int myswap(int a, int b)
{
    cout << "调用普通函数!!!" << endl;
    return 0;
}

template <typename T>
T  myswap(T a, T b)
{
    cout << "调用2个参数 模板函数!!!" << endl;
    return 0;
}

template <typename T>
T  myswap(T a, T b, T c)
{
    cout << "调用3个参数 模板函数!!!" << endl;
    return 0;
}
int main()
{
    int a = 1;
    char c = 'z'; 
    myswap(a,a);       //优先考虑普通函数,匹配成功
    myswap<>(a,a);     //指定使用函数模板,使用空模板实参列表的语法,即 <>
    myswap(c,a);       //普通函数调用,进行隐式类型转换

    myswap(3.0, 4.0);  //调用函数模板可以产生一个更好的匹配,使用函数模板,而普通函数参数是int型
    myswap(3.0, 4.0, 4.0);   //函数重载,3个参数版本
	
}
posted @ 2020-11-27 15:36  FreeK0x00  阅读(341)  评论(0编辑  收藏  举报