ca69a.cpp_c++_函数匹配(重载确定)
/*ca69a.cpp_c++_函数匹配(重载确定)
#重载确定的三个步骤
1.候选函数
2.选择可行函数
3.寻找最佳匹配(如果有的话)
#含有多个形参的重载确定
void f1();
void f1(int);
void f1(int,int);
void f1(double,double = 3.14);
f1(5,6) //调用void f1(double,double)
一、确定候选函数和可行函数
函数匹配的第一步是选择本次调用对应的重载函数集,集合中的函数成为候选函数。
候选函数特征:
1、与被调函数的函数同名
2、其声明在调用点可见
在上面的例子中,有4个名为f的候选函数。第二步考察本次调用提供的实参,然后从候选函数中选出能被这组实参调用的函数,这些新选出的函数成为可行函数,可行函数特征:
1、形参数量与本次调用提供的实参数量相等,而是每个实参的类型与对应的形参类型相同,或者能够转化为形参的类型。
2、每个实参的类型与对应的形参类型相同,或者可以转换成形参的类型。
我们能根据实参的数量从候选函数中排除掉两个,无参数和两个int类型参数都不行,而一个int和默认值的两个double类型都是可行的。
二、寻找最佳匹配
函数匹配的第三步是从可行函数中选择与本次调用最匹配的函数。在这一过程中,逐一检查函数调用提供的实参。
如果有多个可行函数,那么编译器依次检查每个实参以确定哪个函数是最佳匹配。如果有且只有一个函数满足下列条件,则匹配成功:
· 该函数每个实参的匹配都不劣于其他可行函数需要的匹配
· 至少有一个实参的匹配优于其他可行函数提供的匹配
若无函数脱颖而出,编译器会报错,认为此为二义性调用。
三、实参类型转换
1、精确匹配,包括以下情况:
· 实参类型和形参类型相同
· 实参从数组类型或函数类型转换成对应的指针类型
· 向实参添加顶层const或者从实参中删除顶层const
2、通过const转换成实现的匹配
如果重载函数的区别在于它们引用类型的形参是否引用了const,或者指针类型的形参是否指向const,则当调用发生时编译器通过实参是否为常量来决定哪个函数
txwtech
*/
/*ca69a.cpp_c++_函数匹配(重载确定)
#重载确定的三个步骤
1.候选函数
2.选择可行函数
3.寻找最佳匹配(如果有的话)
#含有多个形参的重载确定 void f1();
void f1(int);
void f1(int,int);
void f1(double,double = 3.14);
f1(5,6) //调用void f1(double,double) 一、确定候选函数和可行函数 函数匹配的第一步是选择本次调用对应的重载函数集,集合中的函数成为候选函数。 候选函数特征: 1、与被调函数的函数同名 2、其声明在调用点可见 在上面的例子中,有4个名为f的候选函数。第二步考察本次调用提供的实参,然后从候选函数中选出能被这组实参调用的函数,这些新选出的函数成为可行函数,可行函数特征: 1、形参数量与本次调用提供的实参数量相等,而是每个实参的类型与对应的形参类型相同,或者能够转化为形参的类型。 2、每个实参的类型与对应的形参类型相同,或者可以转换成形参的类型。 我们能根据实参的数量从候选函数中排除掉两个,无参数和两个int类型参数都不行,而一个int和默认值的两个double类型都是可行的。 二、寻找最佳匹配 函数匹配的第三步是从可行函数中选择与本次调用最匹配的函数。在这一过程中,逐一检查函数调用提供的实参。 如果有多个可行函数,那么编译器依次检查每个实参以确定哪个函数是最佳匹配。如果有且只有一个函数满足下列条件,则匹配成功: · 该函数每个实参的匹配都不劣于其他可行函数需要的匹配 · 至少有一个实参的匹配优于其他可行函数提供的匹配 若无函数脱颖而出,编译器会报错,认为此为二义性调用。 三、实参类型转换 1、精确匹配,包括以下情况: · 实参类型和形参类型相同 · 实参从数组类型或函数类型转换成对应的指针类型 · 向实参添加顶层const或者从实参中删除顶层const 2、通过const转换成实现的匹配 如果重载函数的区别在于它们引用类型的形参是否引用了const,或者指针类型的形参是否指向const,则当调用发生时编译器通过实参是否为常量来决定哪个函数 txwtech
*/
#include <iostream>
using namespace std; void f()
{
cout << "f()被调用" << endl;
}
void f(int a)
{
cout << "f(a)被调用" << endl;
}
void f(int a, int b)
{
cout << "f(int a, int b)被调用" << endl;
}
void f(double a, double b=3.14)
{
cout << "f(double a, double b=3.14)被调用" << endl;
}
void g(int a)
{
cout << " g(int a)被调用" << endl;
} int main()
{
f();
f(5.6);//二个可行函数。f(int a),//f(double a, double b=3.14)是最佳匹配
//f(42,2.56); //找不到合适参数进行匹配,存在二义性
//f(2.56,88);//找不到合适参数进行匹配,存在二义性 f(static_cast<double>(), 5.56);//c++风格,static_cast强制类型转换,42转double
f((double),5.56);//c风格写法强制类型转换
f(12.1,5.6);
f(, static_cast<int>(5.66));//c++风格,static_cast强制类型转换,5.66转int
f(,); return ;
}
ca69a.cpp_c++_函数匹配(重载确定)的更多相关文章
- 004_linuxC++之_函数的重载
(一)源码下载 (一) 函数的重载:同一个命名函数,通过传入参数的不同,调用不一样的函数 上面程序的运行结果: (二)函数只能通过参数的不一样重载函数,不能通过返回参数的不一样重载函数 运行结果报错 ...
- c++之函数重载(函数匹配)
Case void f(); void f(int); void f(int, int); void f(double, double = 3.14); 匹配原则: 1)其形参数量与本次调用提供的实参 ...
- C++ 函数重载与函数匹配
<C++ Primer>笔记,整理关于函数重载与函数匹配的笔记. 函数重载 void func(int a); //原函数 void func(double a); //正确:形参类型不同 ...
- Oracle学习总结_day03_day04_条件查询_排序_函数_子查询
本文为博主辛苦总结,希望自己以后返回来看的时候理解更深刻,也希望可以起到帮助初学者的作用. 转载请注明 出自 : luogg的博客园 谢谢配合! day03_条件查询_排序_函数 清空回收站: PUR ...
- 在 lua 中实现函数的重载
在 lua 中实现函数的重载.注:好吧,lua中原来可以实现重载...local function create() local arg_table = {} local function dispa ...
- C++类成员函数的 重载、覆盖和隐藏区别
重载:成员函数被重载的特征: (1)相同的范围(在同一个类中): (2)函数名字相同: (3)参数不同: (4)virtual 关键字可有可无. #include <iostream> u ...
- javascript函数没有重载测试
今天继续学习javascript系列教程,虽然是基础,但我觉得还是有必要用心来学习的,不要怕难,不用怕忘记,不要怕学不会.哪个高手不是从零开始的,我要坚定自己的学习信心,并且认真的走下去.虽然路途艰辛 ...
- C++基础学习笔记----第四课(函数的重载、C和C++的相互调用)
本节主要讲了函数重载的主要概念以及使用方法,还有C和C++的相互调用的准则和具体的工程中的使用技巧. 函数重载 1.基本概念 函数重载就是用同一个函数名来定义不同的函数.使用不同的函数参数来搭配同一个 ...
- 理解javascript函数的重载
javascript其实是不支持重载的,这篇文章会和java语言函数的重载对比来加深对javascript函数重载的理解. 以下我会假设读者不了解什么是重载所以会有一些很基础的概念 ...
随机推荐
- ELK-日志管理平台
elk日志收集工具 1.日志在工作当中的重要性 1 分析日志的意义: 2 1.分析日志监控系统运行的状态 3 2.分析日志来定位程序的bug 4 3.分析日志监控网站访问流量 ...
- Nginx 的过滤模块是干啥用的?
上一篇文章我写了 Nginx 的 11 个阶段,很多人都说太长了.这是出于文章完整性的考虑的,11 个阶段嘛,一次性说完就完事了.今天这篇文章比较短,看完没问题. 过滤模块的位置 之前我们介绍了 Ng ...
- 一个基类Person的多个派生类 代码参考
#include <iostream> #include <cstring> using namespace std; class Person { protected: ch ...
- string 去重复
//AABB>>AB //AAA>>A //ABBAA>ABA public static string SpiltString(stri ...
- Rocket - tilelink - Xbar
https://mp.weixin.qq.com/s/UXFHYEQaYotWNEhshro68Q 简单介绍Xbar的实现. 1. 基本介绍 用于为Xbar的输入和输出连接生成内 ...
- Java实现蓝桥杯 算法提高 八皇后 改
**算法提高 8皇后·改** 时间限制:1.0s 内存限制:256.0MB 提交此题 问题描述 规则同8皇后问题,但是棋盘上每格都有一个数字,要求八皇后所在格子数字之和最大. 输入格式 一个8*8的棋 ...
- Java实现 蓝桥杯 算法提高 最大乘积
算法提高 最大乘积 时间限制:1.0s 内存限制:512.0MB 提交此题 问题描述 对于n个数,从中取出m个数,如何取使得这m个数的乘积最大呢? 输入格式 第一行一个数表示数据组数 每组输入数据共2 ...
- Java实现 蓝桥杯 算法提高 拿糖果
算法提高 拿糖果 时间限制:1.0s 内存限制:256.0MB 问题描述 妈妈给小B买了N块糖!但是她不允许小B直接吃掉. 假设当前有M块糖,小B每次可以拿P块糖,其中P是M的一个不大于根号下M的质因 ...
- SQK Server实现 LeetCode 175 组合两个表
175. 组合两个表 SQL架构 表1: Person +-------------+---------+ | 列名 | 类型 | +-------------+---------+ | Person ...
- Java实现 LeetCode 141 环形链表
141. 环形链表 给定一个链表,判断链表中是否有环. 为了表示给定链表中的环,我们使用整数 pos 来表示链表尾连接到链表中的位置(索引从 0 开始). 如果 pos 是 -1,则在该链表中没有环. ...