函数的默认参数值,即在定义参数的时候同时给它一个初始值。在调用函数的时候,我们可以省略含有默认值的参数。也就是说,如果用户指定了参数值,则使用用户指定的值,否则使用默认参数的值。
例1:
int sum(int a = 10,int b = 10)
{
return a+b;
}
int main()
{
sum(20,10);
sum();
//push 0Ah;
//push 0Ah;
//call sum
int a = 10;
// mov dword ptr [a],0Ah
int b = 10;
// mov dword ptr [b],0Ah
sum(a,b);
// mov eax,dword ptr [b]
// push eax
// mov ecx,dword ptr [a]
// push ecx
sum();
}
注意:函数调用时,使用立即数传参比使用变量传参效率要高,在汇编程序执行过程中少了变量的copy动作,不用在内存中取值再压栈,在一定程度上进行了优化。但是无论是否指定调用传递的实参,都会将参数压入栈中。
函数的默认参数不能出现在左边的原因:
函数调用时,不能给函数的左边参数传递默认值(即不传参),而给右边参数传参,否则编译不能通过。