1、形参带默认值的函数
说到形参带默认值的函数我们还是引用我们最常写的函数,并给出语句指令执行方式如下:
#include<iostream>
#include<string.h>
using namespace std;
int sum(int a, int b)
{
int temp = 0;
temp = a + b;
return temp;
}
int main()
{
int a = 10;
int b = 20;
int ret = sum(a, b);
cout << "ret:" << ret << endl;
return 0;
}
那么形参如何给实参传参数呢?以下是给出的几种传递方式,以及传参时应该注意的规则。
规则一:给默认值的时候,从右向左给
如下的方式是正确的
int sum(int a, int b=20)
{
int temp = 0;
temp = a + b;
return temp;
}
但是以下的方式就是错误的
int sum1(int a=10, int b )
{
int temp = 0;
temp = a + b;
return temp;
}
函数的调用过程中形参的入栈顺序是自右向左的,针对函数的实参和形参的匹配顺序是自左向右的。
规则二:相比于不传参数,传入参数的效率更高,因为少了move指令。所以默认值一般都设置在声明点
我们来看看,具体的语句指令
int ret = sum(a, b);的指令如下:
mov eax,dword ptr[ebp-8]
push eax
mov ecx,dword ptr[ebp-4]
push ecx
call sum
ret = sum(a);的指令调用如下:
push 14H
mov ecx,dword ptr[ebp-4]
push ecx
call sum
ret = sum2();的指令调用如下:它的效率等同于sum2(20,50)
push 14H
push 0AH
call sum
规则三:定义时可以给形参默认值,声明也可以给形参默认值。
申明的时候给默认值,函数体放在主函数后面
int sum3(int a = 10, int b = 20);
int main()
{
......
}
int