函数模板

函数模板的实例

#include <iostream>
using namespace std;

template<typename T>
void myswap(T &a, T &b)
{
    T t;
    t = a;
    a = b;
    b = t;
}

int main()
{
    int x = 1;
    int y = 2;

    myswap(x, y);
    cout<<x<<" "<<y<<endl;
    myswap<int>(x, y);
    cout<<x<<" "<<y<<endl;

    char a = 'a';
    char b = 'b';
    myswap(a, b);
    cout<<a<<" "<<b<<endl;
    myswap<char>(a, b);
    cout<<a<<" "<<b<<endl;


    return 0;
}
View Code

 

函数模板调用过程:先将函数模板实再化为函数,然后再发生函数调用

函数模板,只适用于函数的参数个数相同而类型不同,且函数体相同的情况。如果个数不同,则不能用函数模板。

普通函数会进行隐士的数据类型转换, 函数模板不提供隐式的数据类型转换必须是严格的匹配。

 

函数模板和普通函数的调用顺序

#include <iostream>
using namespace std;

int Max(int a, int b)
{
    cout<<"Max 普通函数: ";
    return a > b ? a: b;
}

template<typename T>
T Max(T a, T b)
{
    cout<<"Max 函数模板: ";
    return a > b ? a: b;
}

int main()
{
    cout<<Max(1, 2)<<endl;    //当函数模板和普通函数都符合调⽤时,优先选择普通函数
    cout<<Max<>(1, 2)<<endl;    //如果想显⽰使⽤函数模板,则使⽤<>类型列表
    cout<<Max(1.0, 2.0)<<endl;    //如果函数模板产⽣更好的匹配,使⽤函数模板

    return 0;
}
View Code

1. 当函数模板和普通函数都符合调用时,优先选择普通函数
2. 若显示使用函数模板,则使用<> 类型列表
3. 如果函数模板产生更好的匹配,使用函数模板

 

posted @ 2020-05-26 21:34  xd_xumaomao  阅读(187)  评论(0编辑  收藏  举报