---
sidebar_position: 10
tags: [Language, C++, Function]
---

# Function

## Default Parameters

- 不能在 **函数原型声明** 与 **函数定义** 中 **同时** 定义参数的默认值,会产生默认值冲突
- 所有缺省参数必须位于参数列表右边
- 不能用前一个参数初始化后一个参数
- 当同时有 `int g(void)` `int g(int x = 1)` 时, 不能调用 g() (具有二义性)

```cpp
int bar(int x , int y = 5, int z = m(u,v));
int foo(int x, int y = x++);    // error
```

## Inline

以下情况会造成内联失败:

- 内联函数中使用 分支/循环/开关/函数调用
- 内联函数定义出现在调用后面(先调用后定义)
- 其他函数访问了内联函数入口地址
- 内联函数定义为(纯)虚函数

内联最终结果:

- 内联成功后, 原函数会被编译器清除
- 不管内联是否成功, 内联函数作用域局限于当前源文件
- 全局 extern main 函数不能定义为内联函数(否则会使得主函数作用域变小, 操作系统无法访问主函数)
- 在类体内实现的任何函数自动变为内联函数
