zoukankan      html  css  js  c++  java
  • 函数模板

    函数模板的实例

    #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. 如果函数模板产生更好的匹配,使用函数模板

  • 相关阅读:
    redis实现与分析
    NULL, '',0 '0'的区别
    Linux strace命令
    strcpy和memcpy的区别
    图书推荐
    php与mysql通讯那点事
    linux命令汇总
    linux系统信息查询及相关概念
    LNMP zabbix安装
    lftp查看文件时间与登录服务查看文件时间相差8小时
  • 原文地址:https://www.cnblogs.com/xumaomao/p/12968825.html
Copyright © 2011-2022 走看看