第三章 函数
引用
int &r=i; \\r为i的引用
1)定义引用的时候必须初始化,使其指向一个存在的对象
2)一旦定义以后就与对象绑定,不允许修改
3)当用引用作为函数的参数时,其效果和用指针作为函数参数的效果相当,此时函数中对形参的各种操作实际上是对实参本身进行操作,而非简单的将实参变量或对象的值拷贝给形参
4)使用引用作为函数的形参时,由于此时形参只是要传递给函数的实参变量或对象的别名而非副本,故系统不会耗费时间来在内存中开辟空间来存储形参。因此如果参数传递的数据较大时,建议使用引用作为函数的形参,这样会提高函数的时间效率,并节省内存空间。
5)使用指针作为函数的形参虽然达到的效果和使用引用一样,但当调用函数时仍需要为形参指针变量在内存中分配空间,而引用则不需要这样,故在C++中推荐使用引用而非指针作为函数的参数
6)如果在编程过程中既希望通过让引用作为函数的参数来提高函数的编程效率,又希望保护传递的参数使其在函数中不被改变,则此时应当使用对常量的引用作为函数的参数。
7)数组的引用作为函数的参数:C++的数组类型是带有长度信息的,引用传递时如果指明的是数组则必须指定数组的长度
交换函数的区别的例子
swap(int a,int b)和swap(int &a,int &b)
内联函数:关键字 inline
为了解决一些频繁调用的小函数大量消耗栈空间(栈内存)的问题采用inline关键字
- inline函数仅仅是一个对编译器的建议,所以最后能否真正内联,看编译器的意思
- inline只适合涵数体内代码简单的涵数使用,不能包含复杂的结构控制语句例如while、switch,并且不能内联函数本身不能是直接递归函数
- 建议:inline函数的定义放在头文件中
- 定义在类中的成员函数缺省都是内联的,例如下面:
class A
{
public:void Foo(int x, int y) { } // 自动地成为内联函数
}
默认参数函数
1)有默认参数的形参必须在形参列表的最右
2)如果函数体定义在函数调用之后,则需要在函数原型声明的时候给出形参默认值
函数重载
函数重载是一种静态多态(编译时的多态),函数重载的规则:
- 函数名称必须相同。
- 参数列表必须不同,重载函数的参数个数,参数类型或参数顺序三者中必须有一个不同。
- 函数的返回类型可以相同也可以不相同。
- 仅仅返回类型不同不足以成为函数的重载。