0、本章内容:
内联函数。
引用变量。
如何按引用传递函数参数。
默认参数。
函数重载。
函数模板。
函数模板具体化。
1、C++内联函数:
为提高程序运行速度所做的一项改进。
在函数声明前加上关键字inline,在函数定义前加上关键字inline。
不能使用递归。
2、引用变量:
2.1 创建引用变量
指向相同的值和内存单元,会一起变换。
引用在声明的时候必须初始化。
使用指针也不能修改引用的指向。
2.2 将引用作为函数参数
2.3 引用的属性和特别之处
传引用的限制更加严格,必须是左值引用。
当且仅当使用const引用,实参与引用参数不匹配,产生临时变量。
应该尽可能使用const,可以处理const和非const实参。
2.4 将引用用于结构
返回引用要避免返回不存在的单元引用。
常规的非引用函数返回类型是右值,不可以通过地址访问该值。
2.5 将引用用于类对象
2.6 对象、继承和引用
2.7 何时使用引用参数
如果是常规数组,则使用指针。
3、默认参数:
声明必须从右到左添加默认值,调用必须从左到右赋值。
原型添加默认值,定义可以不添加默认值。
4、函数重载:
特征表不同才允许重载。
如果有多种可能的调用,编译器拒绝这种调用。
const可用于重载指针和引用,但调用时候并不区分是否是const变量。
左值、右值、const等与调用函数均匹配的时候,选择最匹配的函数。
4.1 重载示例
4.2 何时使用函数重载
5、函数模板:
调用时确实生成并使用,不能缩短编译时间。
5.1 重载的模板
并非所有的模板参数都必须是模板参数类型。
5.2 模板的局限性
部分运算符不能使用所有的类型。
5.3 显式具体化
优先级:非模板 > 显式具体化 > 常规模板
5.4 实例化与具体化
显式/隐式实例化的优先级与显式实例化相同。
可在创建函数时显式实例化,并且可以类型强转(传引用必须保证类型相同)。
不能同时使用同一种类型的显式实例化和显式具体化。
5.5 编译器选择使用哪个函数版本
完全匹配、提升转换、标准转换、用户定义的转化
较具体的函数优先级更高。
多个参数匹配原则是选择所有参数匹配程度都不比其他函数差,且至少有一个高于其他。
5.6 模板函数的发展
decltype用来解决不知道函数运行生成的变量类型的问题。
可用auto … ->decltype()来确定返回类型
6、总结:
null。