• 【C++】模板简述(一):模板的引入


      我们在介绍模板之前,首先想象有这么一个场景:

      我们需要通过C++写出一个通用的加法程序,那么有如下几种方法:

      方法一:C++的函数重载

    //int int int
    int Add(int l,int r){
    	return l+r;
    }
    //float float float
    float Add(float l,float r){
    	return l+r;
    }
    //double double double
    double Add(double l,double r){
    	return l+r;
    }
    //......
    
    /*long int int
    long Add(int l,int r){
    	return l+r;
    }
    */
    

      通过以上实例,我们发现用C++重载有以下缺陷:

      1.每出现一个新类型,我们都必须添加一份新代码.

      2.如果函数只是返回值的类型不同,那么函数重载就无法实现.(例如:long Add(int,int)函数与int Add(int,int)函数不能同时存在)

      3.代码复用性太低,我们发现每种加法其核心代码就基本相似,只是类型不同.

      4.假设有一个加法代码有问题,那么就得修改所有的加法代码,维护起来极其不方便.

      方法二:通过宏函数进行处理

    #define ADD(l,r) ((l)+(r))
    

      对宏有了解的童鞋就知道,宏有以下缺点:

      1.它不是函数,而是在预处理中的一种替换,因此对于某些特殊情况,计算结果会出现问题.(例如:ADD(++i,i++))

      2.它不会进行类型检测,安全性不高.

      3.当出现编译性问题时,不容易定位.

      因此,通过以上方法我们发现:要想完美的解决这个问题,不来点新东西,是绝对不行的.所以,我们来介绍一下泛型编程:

      泛型编程:编写与类型无关的逻辑代码,是代码复用的一种手段.而模板是泛型编程的基础.

      那么模板是什么?怎么用呢?我们下篇文章介绍.

  • 相关阅读:
    tcpdump 抓包
    mysql常用日期函数
    接口自动化测试,一键快速校验接口返回值全部字段
    实训项目
    vue proxyTable 代理方式 解决 跨域pathRewrite
    cookie, session, token 发展史
    Failed to set locale, defaulting to C.UTF-8
    java String与Integer的相互转化
    java LocalDateTime 常用 转换 方法
    Java命令里面的EQ、NE、GT、LT、GE、LE分别代表含义
  • 原文地址:https://www.cnblogs.com/qq329914874/p/6680924.html
Copyright © 2020-2023  润新知