一、C++模板相关

c++提供两种模板机制:函数模板和类模板

  • 模板把函数或类要处理的数据类型参数化,表现为参数的多态性
  • 模板用于表达逻辑结构相同,但具体数据元素类型不同的数据对象的通用行为。
  • 用模板是为了实现泛型,可以减轻编程的工作量,增强函数的重用性。

1. 函数模板

函数模板与普通函数区别:
 函数模板不允许自动类型转化
 普通函数能够自动进行类型转化

调用规则:
 c++编译器优先考虑普通函数
 可以通过空模板实参列表的语法限定编译器只能通过模板匹配
 函数模板可以像普通函数那样可以被重载
 如果函数模板可以产生一个更好的匹配,那么选择模板

函数模板实现机制:
 编译器并不是把函数模板处理成能够处理任何类型的函数
 函数模板通过具体类型产生不同的函数
 编译器会对函数模板进行两次编译,在声明的地方对模板代码本身进行编译,在调用的地方对参数替换后的代码进行编译。

具体化函数模板:
第三代具体化,显示具体化的原型和定意思以template<>开头,并通过名称来指出类型
具体化优先于常规模板
template<>void mySwap(Person &p1, Person &p2){}

2. 类模板

类模板和函数模板的定义和使用类似,我们已经进行了介绍。有时,有两个或多个类,其功能是相同的,仅仅是数据类型不同。

  • 类模板用于实现类所需数据的类型参数化
  • 类模板不能进行类型自动推导 ,函数模板可以自动类型类型推导(不能自动类型转化)
  • 类模板可以做函数参数
  • 类模板派生普通类
    //子类实例化的时候需要具体化的父类,子类需要知道父类的具体类型是什么样的
    //这样c++编译器才能知道给子类分配多少内存
  • 类模板派生类模板
    /继承类模板的时候,必须要确定基类的大小
  • 类模板类内实现
  • 类模板类外实现
  • 模板分文件编译
    解决方案: 类模板的声明和实现放到一个文件中,我们把这个文件命名为.hpp(这个是个约定的规则,并不是标准,必须这么写).
    原因:
     类模板需要二次编译,在出现模板的地方编译一次,在调用模板的地方再次编译。
     C++编译规则为独立编译。

3. C++模板分文件编译问题

头文件源文件 分文件编译出错的原因分析

4. C++模板全特化和偏特化 泛型编程

全特化(特例化) 部分特例化(偏特化)
模板特例化原因: 对特定类型特定知识,提高效率
全特化条件:1 必须有一个主模板,2 然后模板类型全部实例化
函数模板只有全特化, 偏特化可以通过函数重载完成
类模板既有全特化 也有偏特化
调用顺序:全特化类 > 偏特化类 > 主模板类

二、C++11特性

  • 类型推导 auto、decltype和decltype(auto)的用法

    1.auto
    //普通;类型 正常
    //const类型
    //引用和指针类型
    2. decltype
    3. delctype(auto) c++14

  • nullptr和NULL的区别

  • 右值引用

  • 范围for循环

  • lambada表达式

  • 列表初始化:{}内 精度降低会编译报错

  • 并发

  • 【智能指针】

C++ 泛型编程-模板相关推荐

  1. C++ Primer 学习笔记_75_模板与泛型编程 --模板定义

    模板与泛型编程 --模板定义 引言: 所谓泛型程序就是以独立于不论什么特定类型的方式编写代码.使用泛型程序时,我们须要提供详细程序实例所操作的类型或值. 模板是泛型编程的基础.使用模板时能够无须了解模 ...

  2. C++ 泛型编程/模板 泛函编程/Lambda/λ演算

    1.泛型编程(C++模板) 其中,Ada, Delpha, Java, C#, Swift 称之为 泛型/generics; ML, Scala和 Haskell 称之为 参数多态/parametri ...

  3. C++ 泛型编程模板 之 函数模板初步01

    #define _CRT_SECURE_NO_WARNINGS #include<iostream> using namespace std;void mySwapInt(int & ...

  4. C++泛型编程——模板学习

    模板 模板使类和函数可在编译时定义所需处理和返回的数据类型. 一个模板并非一个实实在在的类或函数,仅仅是一个类或函数的描述. 模板一般分为模板函数和类模板,以所处理的数据类型的说明作为参数的类叫类模板 ...

  5. 【C++ 泛型编程 进阶篇】 C++ 泛型编程 模板与异常处理、模板与友元之间的使用

    这里写目录标题 1. 简介 1.1 模板的基础理念 1.2 异常处理的基础理念 2. 模板与异常处理 2.1 异常处理在模板中的基本应用 2.1.1 为模板函数/类添加异常处理 2.1.2 使用noe ...

  6. c++模板---1(模板概念,利用模板实现数组排序,函数模板调用规则)

    什么叫泛型编程?1. 参数类型化. 2. 模板 模板概念 c++提供了函数模板,所谓函数模板,实际上是建立一个通用函数,其函数类型和形参类型不具体制定,用一个虚拟的类型来代表.这个通用函数就成为函数模 ...

  7. C++11新特性以及std::thread多线程编程

    一 .C++11新特性 1. auto 类型推导 1.1 当=号右边的表达式是一个引用类型时,auto会把引用抛弃,直接推导出原始类型: 1.2 当=号右边的表达式带有const属性时,auto不会使 ...

  8. 《C++ Primer》读书笔记

    第一章 开始 类型:程序所处理的数据都保存在变量中,而每个变量都有自己的类型 内置类型:语言自身定义的类型(而形如string等类型都是标准库定义的) main的返回值:0表示成功,非0指出错误类型 ...

  9. unix编程书籍推荐

    [Unix下C/C++开发] unix编程书籍推荐 LiSteven 发布于 2年前,共有 0 条评论 Unix/Linux/BSD系统 相对于Windows,在UNIX下编程获得相关文档要方便很多. ...

  10. [Unix下C/C++开发] unix编程书籍推荐

    [Unix下C/C++开发] unix编程书籍推荐 发表于1年前(2012-12-20 10:14)   阅读(256) | 评论(0) 6人收藏此文章, 我要收藏 赞0 Unix/Linux/BSD ...

最新文章

  1. android webview setappcacheenabled,Java WebView.setDrawingCacheEnabled方法代码示例
  2. QT的QActionGroup类的使用
  3. 原生JS封装自己的AJAX
  4. 吴裕雄--天生自然 高等数学学习:多元函数微分学的几何应用
  5. dj鲜生-26-登陆时-记住用户名的操作
  6. 超3千万人次观看 李佳琦助力中国青年年货节
  7. Confluence 6 创建一个用户宏
  8. 9.28 csp-s模拟测试54 x+y+z
  9. 谭建荣院士:制造业与互联网融合需解决三大瓶颈
  10. 工作总结之因为笛卡尔积问题写SQL搞了半天[害](附笛卡尔积总结)
  11. [转]Phoenix综述(史上最全Phoenix中文文档)
  12. php 方差函数,PHP应用:PHP基于方差和标准差计算学生成绩的稳定性示例
  13. ebx 与 ebp的作用 ---- 总线接口部件
  14. 如何使用 dlv 结合 Goland 进行程序 debug 调试
  15. 借助免费艾特二维码平台打造人气流量空间
  16. JAVA使用springboot整合佳博标签打印机(一)
  17. linux编写学生选课系统
  18. Win10下安装必应输入法能导致Alt+Tab切换页面时不能置于最前
  19. 《5G智慧钢铁白皮书》重磅发布!
  20. Adams 与MATLAB联合仿真 失败,adams与matlab联合仿真例子(正确没商量).doc

热门文章

  1. 1319 移棋子游戏(sg函数模板)
  2. 配置ext邮箱服务器,Extmail实现邮件服务器
  3. 海外直播公会Tik Tok,蓝海项目官方火热招募中
  4. 大学生数学竞赛辅导:Stolz定理和f(x)≡0
  5. 【转载】数据库建模工具
  6. XLua系列讲解_Helloworld
  7. 【Bandit Algorithms学习笔记】EXP3算法理论证明
  8. Source Insight 3.X 插件支持utf8,完美解决中文乱码,另附优美的配置文件一份
  9. 【STM32】 JR6001语音播放
  10. CSS - font-size 设置小字体不生效解决方案(小于12px)