#青训营 x 字节后端训练营# ## 参数带默认值的函数
``` c++
int add(int a = 10, int b = 20);
int sum(int a = 10, int b = 20) {
return a + b;
}

int main() {
int a = 10;
int b = 20;
int ret = sum(a, b);
cout << "ret = " << ret << endl;
// push 14H
// mov ecx, dword ptr[ebp-4]
// push ecx
// call sum
ret = sum(a);
ret = sum();
return 0;
}
```
1. 给默认值的时候从右向左给
`int sum(int a = 10, b)`这种写法不能通过编译
2. 效率有所提升, 立即数少一次取值
3. 定义处可以给形参默认值, 声明也可以给默认值
4. 形参给默认值时, 不管是定义处给还是声明处给, 形参默认值只能出现一次
## inline函数
和普通函数的区别
- 在编译过程中, 就没有函数的调用开销了, 在函数的调用点直接把函数的代码进行展开处理
- inline函数不再产生相应的函数符号
- inline只是建议编译器吧函数处理成内联函数
- 不是所有的inline都会被编译器处理成内联函数 - 递归
- debug版本上, inline函数不起作用, 只有在release下才有
``` c++
inline int sum(int x, int y) {
return x + y;
}
int main() {
int a = 10;
int b = 20;
int ret = sum(a, b);
// 此处有标准的函数调用过程 参数压栈, 函数栈帧的开辟和回退的过程
// 有函数调用的开销, 当有简单函数的时候, 调用函数的开销和函数指令差不多, 很影响效率

}
展开
评论