博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
C++ primer 第十六章
阅读量:4036 次
发布时间:2019-05-24

本文共 1270 字,大约阅读时间需要 4 分钟。

1.      模板定义以template开始,后接模板形参表(<>),模板形参表不能为空。

2.      模板形参可以是表示类型的类型形参,也可以是表示常量表达式的非类型形参。

3.      函数模板可以用与非函数模板函数一样的方式声明为inline,inline说明符放在模板形参表之后、返回类型之前。

4.      在函数模板形参表中,关键字typename和class具有相同含义,可以互换使用。

5.      编写泛型代码的两个重要原则:

模板的形参是const引用。

函数体中的测试只用<来比较。

6.      可以使用函数模板对函数指针进行初始化或赋值。这么做的时候,编译器使用指针的类型实例化具有适当模板实参的模板版本。

template <typename T>

 int compare(const T&, const T&);

int (*pf1) (const int&,const int&)=compare;

pf1是一个函数指针,指向一个接受两个constint&形参并返回int值的函数。

7.      可以显式调用模板实参。在函数名之后,实参表之前加<>表示的实参列表。

8.      编译类型:包含编译类型、分别编译类型。

export关键字:

9.      类模板成员函数的定义:

template <class T>

 ret-type Class_Name<T>::member-name(…)

类模板成员函数只有在为程序所用的时候,才进行实例化,如果从未使用,则不会实例化。

当成员函数也是模板时,它的定义必须包含类模板形参以及自己的模板形参。首先是类模板形参表,然后是成员自己的模板形参表。

template <class T1> 

template <class T2> 

ret-type Class_Name<T1>::member-name(…)

10.  编译器会将友元声明也作为类或函数的声明来对待。

11.  模板特化:该模板定义中一个或多个模板形参的实际类型或实际值是指定的。定义格式如下:

template 后接一堆空尖括号,再接函数名和尖括号,该尖括号中指定特化的模板形参,然后是函数名和函数体。

template <>

ret-type foo<type A>(…){}

模板特化也可以声明而不定义。

如果程序由多个文件构成,则模板特化的声明必须在使用该特化的每个文件中出现。可以将声明包含在头文件中。

12.  类模板特化可以定义与模板本身完全不同的成员。

13.  在类特化外部定义成员时,成员之前不能加template<>标记。

14.  类模板的部分特化,只特化部分形参:

template<不特化的形参列表>

class Class_Name<不特化和特化的形参列表>{…}

部分特化的定义与通用模板的定义完全不会冲突。部分特化可以具有与通用类模板完全不同的成员集合。

15.  函数模板可以重载,可以定义有相同名字,但形参数目或类型不同的多个函数模板。也可以定义与函数模板有相同名字的普通非模板函数。

16.  如果有二义性,普通函数的优先级大于模板函数。

转载地址:http://dwbdi.baihongyu.com/

你可能感兴趣的文章
iOS AFN 3.0版本前后区别 01
查看>>
iOS ASI和AFN有什么区别
查看>>
iOS QQ侧滑菜单(高仿)
查看>>
iOS 扫一扫功能开发
查看>>
iOS app之间的跳转以及传参数
查看>>
iOS __block和__weak的区别
查看>>
Android(三)数据存储之XML解析技术
查看>>
Spring JTA应用之JOTM配置
查看>>
spring JdbcTemplate 的若干问题
查看>>
Servlet和JSP的线程安全问题
查看>>
GBK编码下jQuery Ajax中文乱码终极暴力解决方案
查看>>
Oracle 物化视图
查看>>
PHP那点小事--三元运算符
查看>>
解决国内NPM安装依赖速度慢问题
查看>>
Brackets安装及常用插件安装
查看>>
Centos 7(Linux)环境下安装PHP(编译添加)相应动态扩展模块so(以openssl.so为例)
查看>>
fastcgi_param 详解
查看>>
Nginx配置文件(nginx.conf)配置详解
查看>>
标记一下
查看>>
一个ahk小函数, 实现版本号的比较
查看>>