史上最详细的C++函数重载机制

您所在的位置:网站首页 函数名的定义规则 史上最详细的C++函数重载机制

史上最详细的C++函数重载机制

2024-07-10 14:36| 来源: 网络整理| 查看: 265

文章目录 函数重载1. 例子引入(现象)1.1 什么是函数重载(what)?1.2 为什么需要函数重载(why)? 2. 编译器如何解决命名冲突的?3. 重载函数的调用匹配4. 编译器是如何让解析重载函数调用的?4.1 根据函数名确定候选函数集4.2 确定可用函数4.3 确定最佳匹配函数 5. 总结附录:一种C++函数重载机制

函数重载 ——每个现象后面都隐藏一个本质,关键在于我们是否去挖掘

[前言] 函数重载的重要性不言而明,但是你知道 C++ 函数重载是如何实现的吗?这个可以分为下面两个问题

声明/定义重载函数时,是如何解决命名冲突的?(抛开函数重载不谈,using 就是一种解决命名冲突的方法,解决命名冲突还有很多其它方法)当我们调用一个重载的函数时,又是如何去解析的?(即怎么知道调用的是哪个函数呢)

这两个问题是任何支持函数重载的语言都必须解决的问题!带着这两个问题,开始讨论函数重载吧!

1. 例子引入(现象) 1.1 什么是函数重载(what)?

函数重载是指在同一作用域内,可以有一组相同函数名,不同参数列表的函数,这组函数被称为函数重载。重载函数通常用来命名一组功能相似的函数,这样做减少了函数名的数量,避免了命名空间的污染,对于程序的可读性有很大的好处。

When two or more different declarations are specified for a single name in the same scope, that name is said to overloaded. By extension, two declarations in the same scope that declare the same name but with different types are called overloaded declarations. Only function declarations can be overloaded; object and type declarations cannot be overloaded. ——摘自《ANSI C++ Standard. P290》

下面看一个例子,体会一下函数重载:实现一个相加函数,既可以进行整数相加,也可以实现浮点数和长整型相加。在C++中,我们可以这样做:

#include using namespace std; void print(int i) { cout


【本文地址】


今日新闻


推荐新闻


CopyRight 2018-2019 办公设备维修网 版权所有 豫ICP备15022753号-3