内联函数
在讲内联函数时,我们要考虑考虑在调用少量代码函数时的时间开销,在这样的函数中,大部分时间都花费在开辟栈帧上,而对于简单逻辑而言,宏函数又不够安全,所以诞生了内联函数,内联函数可以在调用函数时,取消开辟栈帧,从而减少时间的开销。
内联函数的定义,使用关键字inline。!
内联函数的调用
内联函数直接在调用处展开函数的内容。
这个方法和#define定义的函数有相同之处,但是内联函数要比宏函数更加安全。
1.宏不进行类型检查,但是函数会进行类型检查。
2.宏的完全替换会导致传递带有副作用的参数或调用宏函数时会导致计算出错。
内联函数的注意事项
1.内联函数在编译过程中不会被汇总到符号表,所以无法通过符号表找到内联函数的地址,所以内联函数的声明和定义不能分开。
2.在类中,短的定义函数默认内联。
内联函数的缺点
- 内联函数的函数体不能太长,inline关键字只是向操作系统申请内联,是否被内联还要看如代码行数…,同时内联函数不能是递归函数。
- 由于内联函数调用直接展开的特性,导致频繁使用内联函数会导致可执行程序的大小过大。
比如某一项目调用某函数10000次,该函数100行。
若该函数内联,则汇编代码为10000*100行。
若该函数非内联,则汇编代码为10000+100行。
带缺省参数的函数
带缺省参数的函数在不传递参数时使用参数的缺省值带入计算,同时缺省值只能从右向左缺省,否则会有二义性。
在缺省参数的函数定义和声明分离时,定义要带缺省值,声明不能带缺省值,以免声明和定义不符合。
若所有的参数都有缺省值,被称为全缺省,一部分参数有缺省值,被称为半缺省。
拷贝构造函数
拷贝构造函数依旧时构造函数的一种,它给我们提供了一种由同类型的对象来初始化另一个对象的方法。
定义
在类中,默认存在一个拷贝构造函数,该函数对于默认类型进行拷贝,对于自定义类型去调用其本身的默认构造。
声明拷贝构造时,参数必须是一个与类类型相同的引用,如果传值,则会导致无限递归。
运算符重载(初)
我们若想对自定义类型进行运算,运算符是不支持的,那么我们就要对运算符进行重载。
使用operator关键字+需要重载的运算符进行重载。
重载的运算符若写在类内,由于存在this指针,所以双目操作符不需要写2个参数。