1、内联函数
特点:
1)内联函数声明时inline关键字必须和函数结合在一起,否则编译器会直接忽略内联请求。
2)C++编译器直接将函数体插入到函数调用的地方
3)内联函数没有普通函数调用时的额外开销(压栈、跳转、返回)
4)内联函数具有普通函数的特征(参数检查、返回类型等)
5)内联函数由编译器处理,直接将编译后的函数体插入调用的地方
宏代码片段由预处理器处理,进行简单的文本替换,没有任何编译过程
本质:以牺牲代码段空间为代价,提高程序的运行时间的效率。
2、默认参数:
float volume(float len , float weight=4 , float hight=5)
{ return lenweighthight; }
规则:
1)从右往左默认即如果默认参数出现,那么右边的都必须有默认参数
2)一旦在一个函数调用中开始使用默认参数值,那么这个参数后的所有参数都必须使用默认参数值
3、函数重载
重载规则:1)函数名相同 ;2)参数列表不同(参数个数不同、参数的类型不同、参数顺序不同均可构成重载);3)函数返回值类型不同不参与构成重载
重载函数调用规则:
1)将所有同名函数作为候选者
2)尝试寻找可行的候选函数
3)精确匹配实参
4)通过默认参数匹配实参
5)通过默认类型转换匹配实参
6)找到的可行候选函数不唯一,出现二义性,编译失败
7)无匹配的候选函数、函数未定义,编译失败
函数重载与函数默认参数:
一个函数不能即作重载又作默认参数的函数。当少些参数时,系统无法确认是重载还是默认参数。
函数重载与函数指针
(1) 函数指针基本方法
方法一:先声明一个函数类型,再定义一个函数指针,例如:
typedef void(myfunc)(int a,int b);
myfunc *myfuncp=NULL;
方法二:先声明一个函数指针类型,再定义一个函数指针,例如:
typedef void(*myfunc1)(int a,int b);
myfunc1 myfuncp1=NULL;
方法三:直接定义一个函数指针变量
void(*myfunc2)(int a,int b);
(2)当使用重载函数名对函数指针进行赋值时,会发生重载调用,即要按照重载调用规则挑选与函数指针参数列表一致的候选者,也要匹配候选者的函数类型与函数指针的函数类型是否相同。