C++学习笔记(19)——模板


目录

模板参数与非类型模板参数

模板参数

类型模板参数——传递类型

非类型模板参数——传递数量

C++11希望array替代静态数组,但实际上vector包揽了一切

模板总结

优点:

缺点:

模板特化:针对某些类型进行特殊化处理

特化


  1. 模板参数与非类型模板参数

    • 模板参数

      • 类型模板参数——传递类型

        • 传递一些参数(int,double等变量类型)到类的模板,这些参数的类型信息被选择性摘取用于构建一个类,这些参数不占用空间
      • 非类型模板参数——传递数量

        • 当我们构建模板时想要设置一些静态空间,这时候我们可以传递非类型模板参数;
        • 传递一些参数(100等整形变量类型,它被专门用来定义静态数据类型,开静态的空间.
          • C++20允许各种变量类型了C++.98只允许整形)到类的模板,这些参数常用明确于成员变量开空间的规格,这些参数参与的开空间占用空间
        • 这里的“非类型”是指这些“模板参数”他们不参与类型性质的构建,他们只是提供一个数量规格
        • “非类型模板参数”得是常量,否则编译不通过
    • 知识点

      • array数组,本质是一个函数的调用;
      • C语言的数组本质是指针的解引用,数组越界是随机抽查,可能检查不出来;
      • 设计之初C++11希望array替代静态数组,但实际上vector包揽了一切;

  • 模板总结

    • 优点

      • 1.复用代码,节约资源,加速迭代开发,C++标准模板库(STL)因此产生
      • 2.增强代码灵活性
    • 缺点

      • 1.模板会导致代码膨胀问题,也会导致编译时间变长;
      • 2.出现模板编译错误时,错误信息非常混乱,不易定位错误;(出错的逻辑会因为逻辑的嵌套而难以发觉)
        • 经验:出错了看第一个错误,一般大量错误都是由第一个错误,或者逻辑前面没有报错的代码错误了。

  • 模板特化:针对某些类型进行特殊化处理

    • 在有通用模板的前提下,针对特殊的模板参数组合我们单独去为其建立一个类模板;
    • 针对特定的模板参数在通用模板运行时功能失效的情况,我们可以通过模板特化,构建一个特定的模板去处理他;
    • 特化

      • 全特化:特化全部参数
      • 偏特化(半特化):特化部分参数
      • 特化也可以使用模板template<class T>
  • 3
    点赞
  • 7
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值