C+ +允许函数设置默认参数,在调用时可以根据情况省略实参。规则如下:
- 默认参数只能按照右到左的顺序
- 如果函数同时有声明、实现,默认参数只能放在函数声明中
- 默认参数的值可以是常量、全局符号(全局变量、函数名)
- 函数重载、默认函数可能存在冲突性、二义性。建议优先保留默认函数
void display(int a, int b =10){
}
void display(int a){
}
//二义性,不知道调用哪个
display(19);
利用汇编理解重载实现:
对于
sum(int a,int b)无默认参数函数,其汇编码如下:
image.png
对于
sum(int a,int b = 4):
默认参数
汇编代码完全相同,(机器码E8后面地址不同是因为intel机器码计算方式所导致,它是根据所调用函数所处位置计算出来的机器码,但是其调用的函数地址是同一个地址)
所以调用sum(1)相当于调用sum(1,4);
网友评论