美文网首页
GeekBand.重学C++(5)----STL

GeekBand.重学C++(5)----STL

作者: EthanZhang_ | 来源:发表于2016-04-08 01:45 被阅读0次

0x00. 模板简介

  • 两种模板:类模板和函数模板
  • 代码重用:允许函数和类以泛型的形式表现和运行,针对各种类型都适用,而无需为每种类型单独写一份代码
  • 模板实例化
    • 模板声明:未给出雷和函数的完全定义,只是给出了函数和类的语法框架
    • 实例化:从模板构建出完全定义的函数和类
      • 显示实例化:代码中明确指定模板参数
      • 隐式实例化:自动推导模板参数
  • 模板定义
    • 声明模板参数时,使用 class 和 typename 均可,但是不能使用 struct

0x01. 函数模板

  • 模板被编译两次:
    • 没有实例化之前,检查模板代码本身是否有语法错误;
    • 实例化期间,检查对模板代码的调用是否否合法。
  • 参数推导
    • 模板参数,是由传递给模板函数的实参决定的
    • 不允许自动类型转换
    • 解决方式1:static_cast 强制类型转换
    • 解决方式2:显示指定模板参数
  • 函数模板重载:
    • 模板函数与普通函数可以共存
    • 重载函数裁决:优先非模板函数,而不是从模板实例化
    • 允许空模板参数列表
    • 模板参数推导,找不到匹配的函数时,只能调用非模板函数(实参可以进行自动类型转换)

0x02. 类模板

  • 类模板参数,可以是某个型别或者一个变量(int/enum),变量可以有默认值
  • 类模板的声明和实现中,如果需要用到类本身,需要使用模板类的完整定义(带模板实参)
  • 模板参数如果带有 <> 符号, 应该在中间加空格:Stack<Stack<int> >
  • 类模板的特化
  • 偏特化

相关文章

  • GeekBand.重学C++(5)----STL

    0x00. 模板简介 两种模板:类模板和函数模板 代码重用:允许函数和类以泛型的形式表现和运行,针对各种类型都适用...

  • GeekBand.重学C++(5)----STL(2)

    待续

  • GeekBand.重学C++(2)

    类间关系:组合/委托/继承 Composition 组合(has-a) Container has a Comp...

  • GeekBand.重学C++(1)

    0x01. 关于头文件 头文件保护 头文件保护,是为了避免重复包含头文件中的声明和定义,导致重定义错误或者编译器找...

  • GeekBand.重学C++(4)

    关于 this 指针 调用父类的成员 非 const 成员中 const 成员中 动态绑定与静态绑定 绑定时期 动...

  • GeekBand.重学C++(3)

    0x01.类型转换 转换函数返回类型可以不写无参数const 成员函数 构造函数:non-explicit-one...

  • 读书笔记17.06.03

    C++ STL:Listlist是C++标准模版库(STL,Standard Template Library)中...

  • [C++] STL 容器

    参考:[C++] STL 容器 (一) - 基本介紹[C++] STL 容器 (二) - Iterator 部分示例:

  • C++ STL 学习笔记

    C++ STL 学习笔记

  • STL之参考文献

    C++标准库是离不开模板的,STL占了C++标准库80%以上。 学习STL(c++ 98)的主要参考: gcc 3...

网友评论

      本文标题:GeekBand.重学C++(5)----STL

      本文链接:https://www.haomeiwen.com/subject/gdlvlttx.html