一、函数参数默认值
C++中定义函数时可以这样定义和声明:
void fun(int i, int j = 5, int k = 10);
void fun(int i, int j , int k ){
/**函数体**/
cout << i << j << k;
}
在声明函数时为函数参数 赋一个默认值,其中j和k在调用时是可选项,调用该函数时,可以传一个参数,也可以传两个参数,也可以传三个参数。如果,只传一个参数,那么j和k的默认值就为5和10。
注意:有默认参数值的参数必须在参数表的最右端。
#include <iostream>
using namespace std;
void fun(int i, int j = 5, int k = 10);
int main(){
fun(20);//打印结果为20510
fun(20, 30);//打印结果为203010
fun(20, 30, 40);//打印结果为203040
}
void fun(int i, int j = 5, int k = 10){
/**函数体**/
cout << i << j << k;
}
二、函数重载
在相同作用域内,用同一函数名定义的多个函数,参数个数和参数类型不同。
返回值类型不同不能算作函数重载。
假设有两个函数实现了重载:
getMax(int x, int y, int z){}
getMax(double x, double y){}
他们实际在计算机中存储的形式分别为:
getMax_int_int_int和getMax_double_double
所以他们的函数名虽然相同,但是由于参数列表不同,所以在计算机内部是不同的函数,计算机是可以分辨出重载的函数的。
三、内联函数
声明函数时,在函数类型前面加上inline修饰,这个函数就变成了内联函数。
引用自:当函数被声明为内联函数之后, 编译器会将其内联展开, 而不是按通常的函数调用机制进行调用。
也就是说,当函数被声明为内联函数之后,程序编译时,当遇到这个函数时,主调函数内调用函数的那部分语句将被函数体语句覆盖。在函数调用非常频繁时,建议使用内联,这样会节省很多时间。
内联函数的逻辑结构应该尽量简单,不应包含for循环、while循环等复杂的结构。
递归函数不应该被声明为内联函数。
内联编译是建议性的,由编译器决定。即使函数被声明为内联函数,在编译时可能也不会以内联的方式编译。
在类中声明的函数,即使不在声明前加“inline”关键字,编译器在编译的时候也会优先将函数编译为内联函数,但是如果函数体逻辑结构太复杂,就会编译成普通的函数