第8章 函数探幽
C++内联函数
省略原型并将定义放在本该提供原型的地方以使用内联函数。
内联函数不能递归。
引用变量
引用变量是已定义变量的别名。
引用变量必须在声明引用时将其初始化。
引用作为函数参数时应尽可能使用const,这样可以:避免无意中修改数据造成的编程错误;使函数能够处理const和非const实参;使函数能够正确生成并使用临时变量。
函数返回引用时,应避免返回函数终止时不再存在的内存单元引用。
默认参数
在原型中将默认值赋给参数以实现默认参数的设置,而函数定义与没有默认参数时完全相同。
带参数列表的函数必须从右向左添加默认值。
函数重载
通过函数重载可以设计一系列函数完成相同的工作但使用不同的参数列表,参数列表也称为函数特征标。
函数重载中没有匹配的原型可能会导致类型转换。
类型引用和类型本身视为同一个特征标。
是特征标而不是函数返回值类型使得可以对函数进行重载。
使用带默认参数的函数只需编写一个函数,程序也只为一个函数请求内存,修改函数时也只需修改一个;使用不同类型的参数,则需要使用函数重载。
函数模板
函数模板是通用的函数描述,它们使用泛型来定义函数,而其中的泛型可用具体类型替换。
模板并不创建任何函数,只是告诉编译器如何定义函数。
函数模板不能缩短可执行程序,最终的代码不包含任何的模板,而只包含了为程序生成的实际函数,使用模板使得生成多个函数定义更简单可靠。
模板常放在头文件中,并在需要使用模板的文件中包含头文件。
模板可以重载。
隐式实例化是编译器使用模板为特定类型生成函数定义。
显式实例化使用模板生成特定类型的函数定义
显示具体化不使用模板来生成函数的定义,而使用专门为特定类型显示定义的函数定义。
隐式实例化、显示实例化和显示具体化统称为具体化。