pdf文档 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 页请下载阅读 -
文档评分
请文明评论,理性发言.