<四>从汇编指令角度看形参带默认值的函数调用
2023-02-18 16:33:43 时间
下面代码中备注部分为 从汇编指令角度 看形参带默认值得函数调用
#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);
相关文章
- 机器学习——最大熵模型
- 机器学习——最优化问题:拉格朗日乘子法、KKT条件以及对偶问题
- 机器学习——逻辑回归(Logistic Regression)
- 机器学习——EM算法
- 机器学习——贝叶斯分类器
- 机器学习——朴素贝叶斯法
- 论文解读(SimCLR)《A Simple Framework for Contrastive Learning of Visual Representations》
- 机器学习——数据增强
- 机器学习——正则化方法Dropout
- ResNet
- 机器学习——最小二乘法
- 机器学习——K-Means算法
- 机器学习——K近邻算法(KNN)
- 聚类:主要聚类算法
- 机器学习——输入空间、特征空间、输出空间
- 机器学习——线性回归
- 机器学习——决策树
- 机器学习——梯度下降法
- 深度学习——概率与信息论
- 机器学习——信息论基础