本章主要涉及引用,重载,模板三个方面
【引用】
1.内联函数不能递归
2.引用是已经定义好变量的别称,其作用是不再是值传递的副本,而是数据本身。
3.必须在声明引用变量时初始化,其伪代码类似于int * const型,可以改变其值
4.引用的函数声明 int swap(int &a,int &b)
5.引用参数是const条件下,有两种情况会产生临时变量
类型正确,但不是左值;
类型不对,但是可以转换成对的
(无名称的会生成匿名临时变量)
6.对于变量,不可以变化,是因为有可能有对入参变化的需求,但是生成新的后,功能达不到预期
7.所以,const除了逻辑上的保证,还能简介促使引用的临时变量生成
8.结构体的返回值,是引用时,返回的是实际结构体的引用,否则是真实的结构体
9.引用已经释放的内存会异常,如局部标量的
10.基类引用可以指向派生类对象
11.read only 入参时:
很小:用内联,值传递
数组:只能指针
结构体:指针,引用
类:引用
【重载】
12.重载时:把类型引用和类型视为同一特征表(参数列表),const视为不同的特征
13.匹配函数式,不区分cosnt,非const,就是非const可以给const型入参,const不能给非const
【模板】
14.template <typename/class T>
void func(T a){}
15.建议模板放在头文件里,因为他本身并不是定义
16.显示具体化:
非模板函数>常规模板函数>显示具体化模板函数
|
|
template <> void swap<job>(JOB A) 具体化相当于特殊处理
参见:http://powerelite.blog.163.com/blog/static/4296589120123255137791/
17.匹配函数标准,再讨论