1. 函数参数默认值:
比较两个函数默认值的正确性:
void fun(int i, int j = 5, int k = 10); (正确)
void fun(int i, int j = 5, int k); (错误)
------------有函数参数值的参数必须在参数列表的最右端!
2. 使用时的一些注意事项:
① 为了避免某些编译器不通过,建议在声明时给函数加默认值,定义时最好不要加默认值;
例如: void fun(int i, int j = 5, int k = 10); -----推荐
void fun(int i, int j = 5, int k = 10) { cout << i << j << k ;} ---- 不推荐
使用时:
int main()
{
fun(20); // i = 20; j = 5; k = 10;
fun(20, 30); // i = 20; j = 30; k = 10;
fun(20, 30, 40); //i= 20; j = 30; k = 40;
return 1;
}
结论:无实参使用默认值; 否则实参代替默认值;
2. 函数重载:
在相同的作用域内满足两个条件:① 用同一函数名定义的多个函数; ②参数个数和参数类型不同; 互称为重载
int getMax(int x, int y, int z) { // to do} double getMax(double x, double y) { // to do}
编译器如何识别重载?
名称相同,参数个数不同------名称和类型,自动识别
重载的好处?
在某些场合下,函数的名称相同时合适的;提高编码效率;
3. 内联函数(inline):
编译时将函数体代码和实参代码函数调用语句,节省了时间,提高了效率,尤其是在循环调用的时间;
定义方式:
inline int max(int a, int b, int c)
int main()
{
int i = 10, j = 20, k = 30, m ;
m = max(i, j, k);
cout << "max =" << m << endl;
return 0;
}
思考:为什么不所有函数都使用内联方式呢?
① 内联是建议性的,由编译器决定;
② 逻辑简单(其中不包括for, while复杂的逻辑结构),调用频繁的函数建议使用
③ 递归函数无法使用内联方式;