Back to Basics - Function Call Resolution
1.30 MB
44 页
0 评论
语言 | 格式 | 评分 |
---|---|---|
英语 | .pdf | 3 |
摘要 | ||
Back to Basics - Function Call Resolution
Copyright © 2024 by Ben Saks and Dan Saks
Back to Basics:
Function Call Resolution
by Ben Saks and Dan Saks
September, 2024
1
Saks & Associates
These notes are Copyright © 2024
by Ben Saks and Dan Saks
a | ||
AI总结 | ||
《Back to Basics - Function Call Resolution》总结如下:
---
### 文档核心内容
本文主要探讨C++中函数调用解析的基础知识,重点包括函数重载、名字查找、默认函数参数和函数模板等特性,以及它们在函数调用中的交互机制。以下是核心内容的总结:
---
### 1. **引言**
- C++的某些语言特性(如函数重载、函数模板等)允许创建同名函数,但使用不当可能导致接口混乱。
- 为了有效使用这些特性,需要理解它们各自的工作机制及其相互作用。
---
### 2. **函数重载与重载解析**
- **函数重载**:在同一作用域内声明多个同名函数,但参数列表不同。
- 示例:`int put(int c);` 和 `int put(int c, FILE *f);` 是一组重载函数。
- **重载解析**:编译器根据函数调用中的参数类型和数量选择最匹配的函数。
- 如果多个函数可能匹配,编译器会寻找“最佳匹配”,否则会报编译错误。
- 示例:`f(0)`可能匹配`int f(int i)`或`long int f(long int li)`,但编译器会选择唯一的最佳匹配。
---
### 3. **名字查找**
- **名字查找**:在函数调用时,编译器首先查找函数的声明,范围从内到外。
- 名字查找和重载解析是两个独立的步骤。即使外层作用域中有更匹配的函数,名字查找也不会consider它们。
- 示例:如果某个作用域内没有声明函数`f`,则从内到外依次查找,直到找到为止。
- 如果`f`在某个作用域中被隐藏(如通过名字遮蔽),则外层的`f`不会被考虑。
---
### 4. **默认函数参数**
- 默认参数允许函数调用时省略某些参数。
- 默认参数的值不影响函数的签名(函数名和参数类型列表)。
- 示例:`int put(int c, FILE *f = stdout);`的签名是`(int, FILE *)`,而不是`int put(int c)`。
- 在重载解析中,填充默认参数被认为是“免费”的,最优匹配会优先选择需要填充默认参数的函数。
---
### 5. **函数模板**
- 函数模板是C++的一种特性,允许函数对多种类型重用。
- 编译器会根据实例化时的参数类型生成具体的函数。
---
### 6. **综合运用**
- 文档通过实例演示了多个特性的交互应用,例如:
- 用`char`类型的参数调用`int put(int c);`时,编译器会自动将`char`提升为`int`。
- 名字查找优先于重载解析,导致某些情况下即使外层作用域有更匹配的函数,也会忽略它们。
---
### 总结
本文系统地介绍了C++中函数调用解析的基础知识,重点强调了名字查找、重载解析、默认参数和函数模板的工作原理及其交互方式。通过具体案例,帮助读者理解如何有效使用这些特性,避免常见的错误。 |
P1
P2
P3
P4
P5
P6
P7
P8
P9
P10
P11
P12
下载文档到本地,方便使用
- 可预览页数已用完,剩余
32 页请下载阅读 -
文档评分