<四>从汇编指令角度看形参带默认值的函数调用
  xs9mrAcZVTZn 2023年11月02日 50 0
C++

下面代码中备注部分为 从汇编指令角度 看形参带默认值得函数调用

#include <iostream>
using namespace std;
int sum(int a=10,int b=20){
	return a + b;	
}

int main(){
	
	int a =1;
	int b =2;
	
	/*	
	  mov eax, dword ptr[ebp-8]  
	  push eax  参数b压栈
	  mov ecx ,dword ptr[ebp-4]
	  push ecx  参数a压栈
	  call sum 	
	*/
	int ret1 =sum(a,b);
	
	/*
	  push 14H  //立即数直接压栈
	  mov ecx,dword ptr[ebp-4]
	  push ecx
	  call sum  
	*/
	int ret2=sum(a);
	
	/*
	   push 14H
	   push 0AH
	   call sum 
	*/
	int ret3=sum();
	
	return 0;

}
关于形参带默认值的函数调用需要注意的几个点

1.给默认值得时候,从右往左给
2.调用效率问题,参数使用默认值得时候直接push一个数值,而不是默认值的情况,需要两步汇编指令,第一步将内存中的值取出放入寄存器, 第二步将寄存器的值压栈,要多一步汇编指令,效率对比要低
3.定义可以给出默认值,声明也可以给默认值,如下代码

#include <iostream>
using namespace std;

int sum(int a=10,int b=20);

int main(){
	
	int a =1;
	int b =2;

	int ret1 =sum(a,b);

	int ret2=sum(a);

	int ret3=sum();
	
	return 0;
}
int sum(int a,int b){
	return a + b;	
}

4.形参给默认值得时候,不管是定义处,还是声明处,不能出现重复,形参默认值只能出现一次

以下方式 编译报错
int sum(int a=10,int b=20);
int sum(int a,int b=2000) ;

以下方式 编译通过
int sum(int a , int b=2000) ;
int sum(int a=10, int b);

【版权声明】本文内容来自摩杜云社区用户原创、第三方投稿、转载,内容版权归原作者所有。本网站的目的在于传递更多信息,不拥有版权,亦不承担相应法律责任。如果您发现本社区中有涉嫌抄袭的内容,欢迎发送邮件进行举报,并提供相关证据,一经查实,本社区将立刻删除涉嫌侵权内容,举报邮箱: cloudbbs@moduyun.com

  1. 分享:
最后一次编辑于 2023年11月08日 0

暂无评论

推荐阅读
  8Tw5Riv1mGFK   20天前   31   0   0 C++
  BYaHC1OPAeY4   13天前   33   0   0 C++
  yZdUbUDB8h5t   16天前   22   0   0 C++
  oXKBKZoQY2lx   3天前   16   0   0 C++
xs9mrAcZVTZn