这章英文名字叫adventures in Functions,中文译者把它翻译成函数探幽。。。
1. 内联函数
内联函数是C++提高程序运行速度所做的一项改进。常规函数执行时,程序将在函数调用后立即存储该指令的内存地址,并将函数参数复制到堆栈,跳到标记函数起点的内存单元,执行函数,然后跳回到地址被保存的指令处。这一跳一跳的就降低效率了。而内联函数就不会跳来跳去,但代价就是需要占用更多内存。如果程序在10个不同的地方调用一个内联函数,则程序将包含该函数代码的十个副本。
内联函数怎么使用呢:
在函数声明前加上关键字inline
在函数定义前脚伤关键字inline
注意的是内联函数不能递归,不能太大。
2. 引用变量
引用变量是已定义的变量的别名,主要用途使用做函数的形参,通过将引用变量用作参数,函数使用原始数据,而不是副本。
引用变量这样定义:
int a;
int & b = a;
这样a和b允许呼唤,因为它们指向相同的值和内存单元。
注意声明引用变量是必须对其初始化,不能
int a;
int &b;
b = a; // 不行!
如果函数这样定义
void fun(int a); //这样的函数是按值传递
void fun(int &a);//这样的函数将引用作为函数参数,称为按引用传递。
注意上例中使用引用传递时a必须是一个变量,不能是一个表达式。
使用引用参数应尽可能使用const:
使用const可避免无意中修改数据的编程错误;
使用const使函数能够处理const和非const实参,否则将只能接受非const数据;
使用const引用使函数能够正确生成并使用临时变量。
引用非常适合于结构和类。
8.2.7总结了何时使用引用参数
使用引用参数的两个主要原因:
可以修改调用函数的数据对象;
通过传递引用而不是整个数据对象,可以提高程序运行速度。这条对结构和类意义重大。
看起来引用和指针差不多,何时用什么的纸雕原则:
对于使用传递的值不做修改的函数:
如果数据对象很小,如内置数据类型或小型结构,则按值传递
如果数据对象是数组,则使用指针,因为这是唯一选择,并将指针声明为执行const的指针
如果数据对象是较大的结构,则使用const指针或const引用,以提高程序效率。
如果数据对象是类对象,则使用const引用。
对于想要修改调用函数数据的函数:
如果数据对象是内置数据类型,则使用指针
如果数据对象是数组,只能使用指针
如果数据对象是结构,则使用指针或引用
如果数据对象是类,则使用引用