• C++函数模板调用规则


    #include <iostream>
    
    /* 函数模板和普通函数都实现 优先调用普通函数 */
    void myswap(int &a, int &b)
    {
       std::cout << "myswap" << std::endl;
    
       int tmp = a;
       a = b;
       b = tmp;
    }
    
    template<typename T>
    void myswap(T &a, T &b)
    {
       std::cout << "template myswap 2" << std::endl;
    
       T tmp = a;
       a = b;
       b = tmp;
    }
    
    /* 函数模板也可以发生重载 */
    template<typename T>
    void myswap(T &a, T &b, T &c)
    {
       std::cout << "template myswap 3" << std::endl;
    }
    
    int main()
    {
       using namespace std;
    
       int a = 1;
       int b = 2;
       myswap(a, b);
       cout << "a " << a << endl;
       cout << "b " << b << endl;
    
       /* 可以使用空模板参数列表来调用函数模板 */
       myswap<>(a, b);
    
       /* 如果函数模板可以产生更好的匹配 优先调用函数模板 */
       char c = 'c';
       char d = 'd';
       myswap<char>(c, d);   
       cout << "c " << (char)c << endl;
       cout << "d " << (char)d << endl;
    
       return 0;
    }
    
    $ ./a.out          
    myswap
    a 2
    b 1
    template myswap 2
    template myswap 2
    c d
    d c
    

    注:既然提供了函数模板,最好不要提供普通函数。容易出现二义性

  • 相关阅读:
    一个切换鼠标左右手的小工具
    聊一聊高并发高可用那些事
    PHP 笔记
    PHP 安装 XDebug
    php symfony/var-dumper 打印插件
    PHP字符串和数组
    ThinkPHP自定义分页模板
    匿名函数
    SQL优化工具
    spring cloud 服务容错保护
  • 原文地址:https://www.cnblogs.com/zhangxuechao/p/16473528.html
Copyright © 2020-2023  润新知