函数重载与函数匹配

news/2024/10/31 7:31:05/

函数匹配过程:

1.候选函数:选择与函数名同名的所有重载函数集合,包括模板,模板具体化,非模板函数;

2.可行函数:根据函数特征标选择能被这组实参调用的函数

3.寻找最佳匹配:

多个形参的函数匹配:

1.该函数每个实参的匹配都不劣于其他可行函数需要的匹配;

2.该函数至少有一个实参的匹配优于其他可行函数的匹配;

即下限比别人的上限高或相同,且由优势;

 最佳匹配规则:

1.非模板函数>模板具体化函数>模板函数;

对于模板函数的类型转换,部分排序规则:将寻求最佳匹配;

2.函数实参形参转换优先级:

a.精确匹配:类型相同,数组类型和函数类型到对应指针类型;向实参添加顶层const,从实参中删除顶层const;

精确匹配允许的:

引用Type->Type& ,Type&->Type;(最优)

数组,函数到指针:Type[]->Type*,Type()->Type(*),(最优)

const与volatile:Type->const Type;Type->volatile Type,(属于b)

底层const转换:Type*->const Type*;Type*->volatile Type*(属于b)

关于重载引用参数:

左值引用形参与可修改的左值实参匹配,const左值引用与可修改的左值实参以及不可修改的左值实参以及临时实参(右值实参)匹配;右值引用与右值实参匹配;发生重载时编译器将越不用转换越好;即右值实参与const左值引用匹配时将创建临时变量,而与右值引用形参匹配时并不发生,const左值引用与非const左值实参匹配时也会发生(const在静态内存区,会在此区创建变量)因此也有消耗,因此消耗越少越好;

b.通过const转换实现的匹配(非const到const,volatile的转换,其实归纳在第一层里比第一层层次低,因为会在静态区出现消耗):const与非const只适用于指针和引用指向的数据,

void recycle(double blot);
void recycle(const double blot);

这两个函数的优先级是相同的,编译时会出现二义性错误;

c.通过类型提升实现的匹配(内置类型小转大):特指整形提升,小整型转换为大整型,或者float转换为double,只有这两种;例如char 到int是提升转换,但char到float是标准转换,long到double也是标准转换;

d.通过算术类型转换(标准转换)和指针转换实现的匹配:前者指标准转换,(char到float,long到double),后者指指针类型的转换,如double*转换为void*,const double*到const void*,整数值0,字面值nullptr转换成任意指针类型,

e.通过类类型转换实现的匹配:类继承层次中的转换

注:转换低意义在于对于内存中相邻空间的读写权限与访问权限:这是危险的;所以不允许随意的转换,但由于类的出现,有时随意转换又是必要的,但为了做出限制,所以出现了四种显式转换符:

static_cast<>(类的转换,也可以用于void*的转换,是必要的,他将赋予指针访问相邻内存空间的能力),

dynamic_cast<>(只允许基类指向派生类),(子类转化为父类)

const_cast<>(底层const到非const的转换),(指针,引用的const非const转换,一般const就不行,因为他是不能转换的)

reinterpret_cast<>(最危险,没有任何限制,也是最担心的);

 


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

相关文章

OPPOR9s 官方原厂售后线刷包救砖包解账户锁屏幕锁

R9S下载地址&#xff1a; https://pan.baidu.com/s/1hfGw31ymr5Ph0ARL7aRNAA

9008刷机工具_黔隆科技刷机教程OPPOR9S忘记密码免刷机保资料解屏幕锁教程

手机刷机解锁你还在大海捞针的寻找方法吗?告诉你个黑科技,关注微信公众号黔隆科技后回复刷机+手机型号,系统就会自动为你寻找最适合的刷机解锁教程,省时又省力。 OPPOR9S出来已经有一段时间了,相信大家都体验到了新机的强大了吧 !可使用时难免会发生一些意外,比如密码忘…

oppo9s刷机教程_OPPOR9S海外版官方固件刷机教程_线刷|救砖教程图解

三:oppoR9s使用OPPO自带工具线刷教程详解 1、安装驱动(有两个驱动都是需要安装的,驱动在线刷包里,下载即可看到) ①安装驱动1,如下图所示: ②安装驱动2,如下图所示: 2、打开工具,如下图所示(记住用管理员身份运行) 解压刷机包前,请关闭一切杀毒软件,如果误删了文件,…

高通210系列-MSM8909 核心板(ARM Cortex-A7架构)

核心板特性 A7架构 4核&#xff08;4*1.1GHz(A7)&#xff09; 产品尺寸小&#xff0c;便于客户集成&#xff0c;减少产品体积&#xff1b; 支持4G LTE超高速上网&#xff0c;单板兼容移动/联通/电信2G/3G/4G&#xff1b; 支持232存储器,Micro SD支持32G&#xff1b; 尺寸小、…

高通平台的耳机检测(msm8909)

记录高通msm8909耳机检测的机制&#xff0c;相关代码 kernel/arch/arm/boot/dts/qcom/msm8909-qrd-skuc.dtsi sound {compatible "qcom,msm8x16-audio-codec";qcom,model "msm8909-skuc-snd-card";qcom,msm-snd-card-id <0>;qcom,msm-codec-type…

高通 msm8909 watchdog overview

高通的描述 看门狗定时器是一个固定长度的计数器&#xff0c;它使系统能够从意外的硬件或软件灾难中恢复。 除非系统定期重置看门狗定时器&#xff0c;否则看门狗定时器会在定时器超时后自动重置系统。 MSM ASIC 为芯片系统使用了一个看门狗定时器。 调制解调器软件负责重置看…

高通cDSP介绍汇总

Qualcomm Hexagon Compute DSP (cDSP)是高通平台上专门用来做通用计算的硬件加速单元&#xff0c;与主机 CPU 相比&#xff0c;DSP 通常以较低的时钟速度运行&#xff0c;并提供更多的并行指令级。 这使得 DSP 在功耗方面成为 CPU 的更好替代品。 因此&#xff0c;将尽可能多的…

CorelDRAW2023最新工作室Win版矢量图形编辑与排版工具软件

CorelDRAW简称CDR,是一款专业的平面设计软件,专注于矢量图形编辑与排版。ps和cdr是常用的两款平面设计软件&#xff0c;一直以来深受广大设计师的喜爱&#xff0c;但仍然有很多小伙伴不知道它们之间的区别。那初学者先学ps还是cdr&#xff0c;初学者cdr哪个版本好&#xff1f;我…