搜索

pdf文档 Back to Basics - Function Call Resolution

1.30 MB 44 页 0 下载 71 浏览 0 评论 0 收藏
所属分类: 后端开发 / C++
语言 格式 评分
英语
.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 void f(T t);` - 通过模板实例化,可以生成不同类型的重载函数。 --- #### 6. **总结** 本文强调了理解函数重载、重载解析、名称查找和默认参数的重要性,并展示了这些机制如何相互作用。掌握这些概念有助于编写清晰、灵活且高效的C++代码。
P1
P2
P3
P4
P5
P6
P7
P8
P9
P10
P11
P12
下载文档到本地,方便使用
- 可预览页数已用完,剩余 32 页请下载阅读 -
文档评分
请文明评论,理性发言.