6.6 函数匹配

news/2024/11/20 21:24:37/

文章目录

      • 确认候选函数和可行函数
      • 寻找最佳匹配
      • 含有多个形参的函数匹配
    • 实参类型转换
      • 需要类型提升和算术类型转换的函数

在大多数情况下,我们容易确定某次调用应该选用哪个重载函数。然而,当几个重载函数的形参数量相等以及某些形参的类型可以由其他类型转换得来时,这项工作就不那么容易了。

确认候选函数和可行函数

函数匹配的第一步是选定本次调用对应的重载函数集,集合中的函数称为候选函数。 候选函数具备两个特征:一是与被调用的函数同名,二是其声明在调用点可见。

第二步考察本次调用提供的实参,然后从候选函数中选出能被这组实参调用的函数,这些新选出的函数称为可行函数。 可行函数也有两个特征:一是其形参数量与本次调用提供的实参数量相等,二是每个实参的类型与对应的形参类型相同,或者能转换成形参的类型。(在有默认实参的情况下,便可以小于等于)

如果没有找到可行函数,程序将要报错无匹配函数的错误

寻找最佳匹配

函数匹配的第三步是从可行函数中选择与本次调用最匹配的函数。在这一过程中,逐一检查函数调用提供的实参,寻找形参类型与实参类型最匹配的那个可行函数。后面将介绍“最匹配”的细节,它的基本思想是,实参类型与形参类型越接近,它们匹配得越好。

含有多个形参的函数匹配

有一个例子,比如传入的参数是(1,2.0),两个重载函数:

//第一个函数
void function(int ,int);
//第二个函数
void function(double,double);

对于多个函数中进行寻找最佳匹配的时候,如果没有一个函数可以直接脱颖而出,超出别人的优先级,那么就存在二义性。

实参类型转换

为了确定最佳匹配,编译器将实参类型到形参类型的转换划分成几个等级,具体排序如下所示:

  1. 精确匹配,包括以下情况:
    (1)实参类型和形参类型相同。
    (2)实参从数组类型或函数类型转换成对应的指针类型。
    (3)向实参添加顶层const或者从实参中删除顶层const。

  2. 通过const转换实现的匹配。

  3. 通过类型提升实现的匹配。

  4. 通过算术类型转换或指针转换实现的匹配。

  5. 通过类类型转换实现的匹配.

需要类型提升和算术类型转换的函数

实际上举个例子就明白了。

类型提升的例子:

//第一个函数
void function(int);
//第二个函数
void function(short);
//调用函数
function('a');//实际上调用的是第一个函数,因为char类型进行了类型提升,类型提升优先级更高。

算术类型转换的注意事项:

//第一个函数
void function(long);
//第二个函数
void function(float);
//调用函数
function(3.5);//实际上3.5是double型,对于上述的进行都是进行转换,等级一致而非转成float型,所以是进行二义性报错。

http://www.ppmy.cn/news/8647.html

相关文章

数值优化之凸集

本文ppt来自深蓝学院《机器人中的数值优化》 目录 1 凸集的定义 2 凸集的运算 1 凸集的定义 集合中任意两点连线形成的线段属于这个集合,这个集合是凸集。 注意:是否是凸集,集合的边界是否属于这个集合很重要 这涉及到构造最小凸包的问题…

【LeetCode每日一题】——263.丑数

文章目录一【题目类别】二【题目难度】三【题目编号】四【题目描述】五【题目示例】六【解题思路】七【题目提示】八【时间频度】九【代码实现】十【提交结果】一【题目类别】 数学 二【题目难度】 简单 三【题目编号】 263.丑数 四【题目描述】 丑数 就是只包含质因数 …

MySQL补齐函数LPAD和RPAD之SQLite解决方案

工作中经常需要对数据进行清洗,并对个别字段进行格式化处理,像 字符串左右补齐。MySQL数据库自带有LPAD()、RPAD(),而SQLite数据库没有的相应函数,需要自己转换。 目录 1、MySQL数据库 1.1、MySQL左右补全函数 1.2、实践验证 …

Java工具——MySQL介绍与安装

Java工具——MySQL介绍与安装MySQL数据库介绍1. 简介2. MySQL发展历史MySQL数据库安装1. 下载安装包2. 安装3. 配置环境变量MySQL数据库介绍 1. 简介 MySQL是应用最广泛、普及度最高的开源关系型数据库,MySQL由瑞典MySQL AB公司开发,目前属于Oracle旗下…

【C++】-- 哈希(上万字详细配图配代码从执行一步步讲解)

目录 哈希 常见哈希函数 除留余数法 哈希冲突 哈希冲突解决 闭散列 a、线性探测 插入 查找 删除 线性探测的实现代码 b、二次探测 二次探测的实现 开散列 开散列实现 插入 查找 删除 析构函数 代码汇总 哈希 常见哈希函数 直接定址法 -- (常用)-- 不存在哈…

设计 | 分享5个好用的PPT模板网站

第一PPT 这个老牌的模板网站了,全站都是免费下载,还是不错的 但是素材质量嘛,免费所以不太高。 第一PPT下载https://www.1ppt.com/ 模板狗 这个是最近发现的一个网站,其中内容比较精美。 而且不用开会员也能单独购买&#x…

哈希表题目:同构字符串

文章目录题目标题和出处难度题目描述要求示例数据范围解法思路和算法代码复杂度分析题目 标题和出处 标题:同构字符串 出处:205. 同构字符串 难度 3 级 题目描述 要求 给定两个字符串 s\texttt{s}s 和 t\texttt{t}t,判断它们是否是同…

C++类的多种构造函数

目录默认构造函数普通构造函数拷贝构造函数vector存含有指针的自定义类型主义问题转换构造函数移动构造函数举例两个场景下面以Complex 复数类来学习C类中的各种构造函数; #include <iostream> using namespace std;//复数类 class Complex{friend ostream & operat…