| 语言 | 格式 | 评分 |
|---|---|---|
英语 | .pdf | 3 |
| 摘要 | ||
文档讨论了函数调用解析的基本知识,包括函数重载、名称查找、默认参数和函数模板。函数重载通过参数类型选择最佳匹配,名称查找在编译时确定函数,默认参数影响解析过程。文档还涉及函数模板及其相互作用。 | ||
| AI总结 | ||
### 文档总结
本文主要讨论了C++中与函数调用相关的几个核心概念,包括函数重载、重载解析、名称查找、默认参数以及函数模板,并重点分析了这些机制如何相互作用。
---
#### 1. **函数重载**
- 函数重载是指在同一作用域内,使用相同函数名但参数列表不同的函数。
- 示例:
- `int put(int c);`
- `int put(int c, FILE *f);`
- `int put(char const *s);`
---
#### 2. **重载解析(Overload Resolution)**
- 当调用重载函数时,编译器通过以下步骤选择最佳匹配函数:
1. 根据函数参数的类型和转换规则,对候选函数进行排序。
2. 优先选择不需要转换或转换成本最小的函数。
- 示例:
- 调用 `g(0)` 时,`void g(int x, int y = 1)` 是最佳匹配,因为不需要任何转换。
- 如果存在多个候选函数,但无法确定唯一最佳匹配,则会导致编译错误。
---
#### 3. **名称查找(Name Lookup)**
- 名称查找是编译器在重载解析之前完成的步骤,用于确定函数名的作用域。
- 名称查找的结果决定了重载解析的候选函数范围:
- 如果名称查找成功(找到至少一个函数声明),则仅考虑该作用域内的函数。
- 如果名称查找失败(未找到函数名),则会导致编译错误。
---
#### 4. **默认参数与重载解析**
- 默认参数不会被视为类型转换的一部分,因此在选择函数时不会增加“成本”。
- 示例:
- `void g(double d);`
- `void g(int x, int y = 1);`
- 调用 `g(0)` 时,`void g(int x, int y = 1)` 是最佳匹配,因为参数 `0` 可以直接匹配 `int x`。
---
#### 5. **函数模板**
- 函数模板是一种通用机制,允许通过类型参数生成多个重载函数。
- 示例:
- `template | ||
P1
P2
P3
P4
P5
P6
P7
P8
P9
P10
P11
P12
下载文档到本地,方便使用
- 可预览页数已用完,剩余
32 页请下载阅读 -
文档评分














Back to Basics - Function Call Resolution