首页 > 编程语言 ><一>从汇编指令角度看形参带默认值的函数调用

<一>从汇编指令角度看形参带默认值的函数调用

时间:2022-10-12 14:22:47浏览次数:49  
标签:return int 形参带 sum 函数调用 push 默认值

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

点击查看代码
#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);

标签:return,int,形参带,sum,函数调用,push,默认值
From: https://www.cnblogs.com/erichome/p/16782482.html

相关文章

  • Mysql 插入timestamp没有使用默认值问题
    在一次升级过程中,发现Mysql插入数据报了个错Column'create_time'cannotbenull.但是看了下这个字段虽然是非null,但是是有默认值的`create_time`timestampNOTNULL......
  • el-cascader设置选中默认值
      业务需求:点击左侧树,右边点击上传按钮后弹出页面默认选中左侧选中的节点步骤:1、定义数组 parentList:[];      2、点击左侧时,获取选中节点及所有父节点,......
  • 获取 checkbox 和 radio 选定的值,以及设默认值
    上述代码实现了,获取checkbox和radio选定的值,以及根据值显示表单默认已经选择的值<p></p>window.οnlοad=function(){varcondition=document.getElementById......
  • 模板基类与正确的派生类函数调用--Effective C++ Item 43
    问题描述假设我们有这样一个业务场景,我们管理着许多公司,每个公司都有一个自己的许多日志信息需要处理,于是为了方便,我们写了一个模板类用来处理这些公司的信息,并且将这些公......
  • 函数调用机制图解
      1). 每个函数都有一个自己的栈当调用/执行一个函数时,就会开辟一个独立的空间(栈)此处优先执行main栈当接触到test时会重新创建一个test栈,并且把6传递给test的n......
  • Apollo 中配置String、Map和List和默认值
    摘要:在Apollo中,配置String、Map和List等类型的信息,同时设置默认值。综述  随着业务需求的变更,需要在Apollo中配置一个Map<String,List>类型的变量用于标志客户信息,诸......
  • get提交的数据过大,超过了默认值。
    tomcat报错,信息:ErrorparsingHTTPrequestheaderNote:furtheroccurrencesofHTTPheaderparsingerrorswillbeloggedatDEBUGlevel  原因get提交的数......
  • java 布尔类型的默认值
    今天在看springsecurity源码时,有这么一段代码:publicUserDetailsbuild(){StringencodedPassword=(String)this.passwordEncoder.apply(this.password......
  • JavaScript 函数调用
    JavaScript函数有4种调用方式。每种方式的不同在于 this 的初始化。this关键字:this指向函数执行时的当前对象全局对象:当函数没有被自身的对象调用时this的值就......
  • mysql5.7+版本,date类型设置默认值0000-00-00 报错
    在本地建表,发现无法给date类型设置默认值为0000-00-00,报错:  在mysql命令行输入:SELECT@@SQL_MODE,可以看到值为:ONLY_FULL_GROUP_BY,STRICT_TRANS_TABLES,NO_ZER......