zoukankan      html  css  js  c++  java
  • 模板(一)

    一、函数模板

      1.为什么使用模板

        模板是为了实现泛型,可以减轻编程的工作量,增强函数的重用性 

    #include <iostream>
    using namespace std;
    
    
    template<typename T>
    void MySwap(T& a, T& b) {
        T temp = a;
        a = b;
        b = temp;
    }
    
    void test01() {
        int a = 10, b = 20;
        //自动类型推导
        MySwap(a, b);
        cout << "a = " << a << ", b = " << b << endl;
        double da = 1.23, db = 4.56;
        MySwap(da, db);
        cout << "da = " << da << ", db = " << db << endl;
    
        //显式指定类型
        MySwap<int>(a, b);
        cout << "a = " << a << ", b = " << b << endl;
        MySwap<double>(da, db);
        cout << "da = " << da << ", db = " << db << endl;
    }
    
    int main() {
        test01();
        return 0;
    }
    View Code

      2.函数模板和普通函数的区别

        函数模板不允许自动类型转化,普通函数能够进行类型转化

      3.函数模板和普通函数在一起时的调用规则

        函数模板可以重载

        C++编译器优先考虑普通函数

        如果模板可以产生一个更好的匹配,那么选择模板

        可以通过空模板实参列表的语法限定编译器只能通过模板匹配

    #include <iostream>
    using namespace std;
    
    //函数模板必须严格类型匹配
    template <typename T>
    int MyAdd(T a, T b) { return a + b; }
    
    //普通函数可以进行自动类型转化
    int MyAdd(int a, char c) { return a + c; }
    int MyAdd(int a, int b) { return a + b; }
    
    void test01() {
        int a = 10, b = 20;
        char c1 = 'a', c2 = 'b';
        MyAdd(a, c1);  //调普通函数
        MyAdd(a, b);   //调普通函数
        MyAdd(c1, b);  //模板不允许自动类型转换,调普通函数,
        MyAdd<>(a, b); //使用空模板实参列表,限定编译器用模板匹配
    }
    
    //函数模板可以向普通函数那样重载
    template<typename T> void Print(T a) {}
    template<typename T> void Print(T a, T b) {}
    
    int main() {
        test01();
        return 0;
    }
    View Code

        

  • 相关阅读:
    setState 是异步吗?
    React优化点滴
    JS原型,作用域,this,闭包
    Webpack 模块化打包优化
    JS异步编程
    Web网络安全
    Http2.0和Http3.0
    Http协议基础
    Harris算子以及未来的规划...
    剑指offer 二维数组查找
  • 原文地址:https://www.cnblogs.com/csqtech/p/7357923.html
Copyright © 2011-2022 走看看