当前位置: 首页 > news >正文

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>
http://www.lryc.cn/news/353358.html

相关文章:

  • java8新特性——函数式编程详解
  • mybatis-plus小课堂: apply 拼接 in SQL,来查询从表某个范围内的数据
  • 民宿推荐系统-手把手调试搭建
  • 线性回归模型
  • 西门子全球业务调整:数十亿欧元交易额,开启新篇章
  • AI遇上遥感,未来会怎样?
  • 认知架构 cognitive architecture
  • 数据插值之朗格朗日插值(一)
  • 【CCF-CSP】 202309-3 梯度求解
  • jvm的类加载
  • 2024年汉字小达人活动4个多月开赛:18道历年选择题和答案、解析
  • 群晖安装青龙脚本
  • 【机器学习系列】使用高斯贝叶斯模型进行数据分类的完整流程
  • Python中的单例模式:原理、实现与应用
  • Linux基础(六):Linux 系统上 C 程序的编译与调试
  • 移动硬盘难题:不显示容量与无法访问的解决策略
  • 基于springboot+vue的智慧外贸平台
  • @Async详解,为什么生产环境不推荐直接使用@Async?
  • LaTeX 2022软件安装教程(附软件下载地址)
  • 纯干货分享 机器学习7大方面,30个硬核数据集
  • 算法训练营day46
  • 推荐五个线上兼职,在家也能轻松日入百元,适合上班族和全职宝妈
  • Python_文件操作_学习
  • Leetcode 3154. Find Number of Ways to Reach the K-th Stair
  • Vue3/Vite引入EasyPlayer.js播放H265视频错误的问题
  • CentOS 7安装alertmanager
  • YOLOv10详细解读 | 一文带你深入了解yolov10的创新点(附网络结构图 + 举例说明)
  • 【openlayers系统学习】3.5colormap详解(颜色映射)
  • Redis教程(十五):Redis的哨兵模式搭建
  • 【C语言】8.C语言操作符详解(3)