默认参数
1,什么是默认参数
C++的参数可以在参数列表中直接赋值作为默认参数,且只能在后面几位参数赋值,即只有后面几位参数可以作为默认参数。
2,默认参数的使用
默认参数可以写在声明或者定义任意一处,一般写在声明处,因为声明处可以暴露给其他人,而实现部分一般是程序员自己知道的。例如:
声明:
int M_ParaMetre(int n1, int n2, int n3 = 1, int n4 = 2);
实现:
int `M_ParaMetre(int n1, int n2, int n3,int n4)`
{
return 0;
}
3,调用情况
(1)M_ParaMetre(0,0)
;n1,n2,n3,n4参数的值就分别为0,0,1,2;即n1,n2参数的值由调用者指定,n3,n4的值是默认的。
(2)M_ParaMetre(0,0,3);
n1,n2,n3,n4参数的值就分别为0,0,3,2;即n1,n2,n3参数的值由调用者指定,n4的值是默认的。
(3)注意不可以为n1,n2,n4指定参数而n3使用默认参数,也就是说只有最后的连续几位参数可以默认指定
内联函数
内联的意思是将整个函数都嵌入到程序里面,注意嵌入这个词,下面解释一下所谓嵌入的含义:
首先回忆函数调用的过程,当程序执行到函数调用所在地方的时候,程序会首先进入到函数体内部,这中间有过程要为函数开辟栈空间, 用于本次函数的调用中临时变量的保存、 现场保护。 这块栈空间我们称之为函数栈帧,即进出函数需要花费一定的开销。
而如果是下面的函数:
int GetMax(int a,int b)
{
return a>b?a:b;
}
这个函数可能会经常被调用,而且它的执行开销很小,与之相比进出函数的开销反而有些不可忽略了,这个时候我们就可以将其定义为内联函数
inline int GetMax(int a,int b)
{
return a>b?a:b;
}
在函数调用的时候例如GetMax(1,2)
语句就会直接替换为1>2?1:2这个函数体;即没有函数调用过程,整个函数嵌入到了父程序中。
注意:
1,内联函数是编译器的建议,有时候编译器不会把inline函数编译为内联函数,比如有时候代码体很大但是声明为内联函数。
2,内联函数一般写在头文件中
3,debug版本没有inline,方便调试