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

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

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

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

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

    具体来说:

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

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

    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;
    }

      运行结果:

  • 相关阅读:
    EBS中的采购单据状态及其控制
    详解EBS接口开发之采购接收&退货处理之关键API--(补充)
    数据挖掘系列
    如果看了这篇文章你还不懂傅里叶变换,那就过来掐死我吧
    机器学习中的数学
    一个机器学习博客 ,包括 Standford公开课machine learning
    机器学习流行算法一览
    java se 另一博客
    java 正则
    java map
  • 原文地址:https://www.cnblogs.com/ymj11/p/13726686.html
Copyright © 2011-2022 走看看