C++知识分享:一种C++函数的重载机制

一种C++函数重载机制

这个机制是由张素琴等人提出并实现的,他们写了一个C++的编译系统COC++(开发在国产机上,UNIX操作系统环境下具有中国自己版权的C、C++和FORTRAN语言编译系统,这些编译系统分别满足了ISOC90、AT&T的C++85和ISOFORTRAN90标准)。COC++中的函数重载处理过程主要包括两个子过程:

1、在函数声明时的处理过程中,编译系统建立函数声明原型链表,按照换名规则进行换名并在函数声明原型链表中记录函数换名后的名字(换名规则跟本文上面描述的差不多,只是那个int-》为哪个字符、char-》为哪个字符等等类似的差异)

有兴趣一起交流学习c++的小伙伴可以加群:941 63 6044

图附1、过程1-建立函数链表(说明,函数名的编码格式为:<原函数名>_<作用域换名><函数参数表编码>,这跟g++中的有点不一样)

2、在函数调用语句翻译过程中,访问符号表,查找相应函数声明原型链表,按照类型匹配原则,查找最优匹配函数节点,并输出换名后的名字下面给出两个子过程的算法建立函数声明原型链表算法流程如图附1,函数调用语句翻译算法流程如图附2。

附-模板函数和普通函数构成的重载,调用时又是如何匹配的呢?

下面是C++创始人Bjarne Stroustrup的回答:

1)Find the set of function template specializations that will take part in overload resolution.

2)if two template functions can be called and one is more specified than the other, consider only the most specialized template function in the following steps.

3)Do overload resolution for this set of functions, plus any ordinary functions as for ordinary functions.

4)If a function and a specialization are equally good matches, the function is perferred.

5)If no match is found, the call is an error.

原文地址:https://www.cnblogs.com/2f3d/p/10197818.html

时间: 2024-08-02 21:02:07

C++知识分享:一种C++函数的重载机制的相关文章

C/C++知识要点3——类成员函数的重载、覆盖和隐藏的区别

1.类成员函数的重载: 重载:如果同一作用域内的几个函数名字相同但是形参列表不同,我们称之为重载. 成员函数被重载的特征: (1)相同的范围(比如在同一个类中): (2)函数名字相同: (3)参数不同: (4)virtual 关键字可有可无. 2.覆盖是指派生类函数覆盖基类函数,特征是: (1)不同的范围(分别位于派生类与基类): (2)函数名字相同: (3)参数相同: (4)基类函数必须有virtual 关键字. 3.隐藏是指派生类的函数屏蔽了与其同名的基类函数,规则如下: (1)如果派生类的

SQL中的5种聚集函数

原文:SQL中的5种聚集函数 作为一个刚毕业进入这行的菜鸟,婶婶的觉的那种大神.大牛到底是怎样炼成的啊,我这小菜鸟感觉这TMD要学的东西这多啊,然后就给自己定了许多许多要学习的东西,可是有人又不停地给你灌输:东西不在多而要精通!我也觉得很有道理,可是怎样才能精通呢?封神之路,在哪里啊 !!! 这一天没有一个安静的心,基本是学不进去了,发现自己还是太功利了,急功近利!也许你只要学就行,管他是否能够立即让人见识到你的厉害,技术和知识这种东西也许还是要强调一个 底蕴的.既然自己最烦那种看了两篇文章就给

SCOM 2012知识分享-20:管理用户角色

适应平台:System Center 2012 RTM/SP1 ------------------------------------------------------------------------------------------------------ 在 System Center 2012 – Operations Manager 中,用户角色是用于分配访问监视数据以及执行操作所需的权限的方法. 用户角色旨在应用于用户组,这些用户需要具有对相同监视对象组的访问权限以及对此组执

SCOM 2012知识分享-1:理解代理

Operations Manager"代理"是安装在计算机上的一项服务. 代理会收集数据.将采样数据与预定义的值进行比较.创建警报并运行响应. 管理服务器会接收配置并将配置分发到受监视的计算机上的代理. 所有代理均要向管理组中的一个管理服务器报告. 此管理服务器称为代理的主管理服务器. 代理根据管理服务器发送的配置观察受监视的计算机上的数据源并收集信息. 此代理还计算监视的计算机以及监视的计算机上的对象的运行状况状态,并向管理服务器报告. 监视的对象的运行状况变化或其他条件满足时,代理

SCOM 2012知识分享-2:理解管理服务器

(一)Management Server Management Server管理服务器主要用来: 管理整个管理组,并负责与数据库进行通讯: 负责为Agent提供配置数据: 所有的Agent会将健康数据,性能数据等提交给Management Server,然后再由Management Server写入到数据库中.Agent并不会直接与数据库打交道: 管理服务器是对管理组进行管理以及与数据库通信的焦点. 打开操作控制台并连接到管理组时,你就会连接到该管理组的管理服务器. 根据计算环境的规模,管理组可

十进制负数转换为二进制、八进制、十六进制的知识分享

这篇文章主要介绍了十进制负数转换为二进制.八进制.十六进制的知识分享,需要的朋友可以参考下 程序猿们或许对二进制都不陌生,二进制是计算技术中广泛采用的一种数制.二进制数据是用0和1两个数码来表示的数.但是很多人都会将二进制转换成整数,但是如何用二进制表示负数呢?有的人会说,在二进制前面加个负数符合.而计算机只能认识0 和 1,又怎么去加个额外的负数符号呢?于是我们就需要用0和1来表示负数.如果想要弄懂这个,我们需要先了解什么是二进制原码. 原码是什么 原码(true form)是一种计算机中对数

C语言基础知识----指针数组 &amp;&amp; 数组指针 &amp;&amp; 函数指针 &amp;&amp;指针函数

指针数组 && 数组指针 char (*ptr)[5]; //定义一个指向数组指针ptr,指向包含5个char类型的数组 char *a[5]; //定义一个指针数组a,包含5个char*类型指针 #include <stdio.h> int main(void) {     char *a[5]={"red","white","blue","dark","green"};   

SCOM 2012知识分享-17:创建并管理组

适应平台:System Center 2012 RTM/SP1 ------------------------------------------------------------------------------------------------------ 在 System Center 2012 – Operations Manager 中,组是基于 Windows 的计算机.硬盘或 Microsoft SQL Server 实例等对象的逻辑集合. 可以使用创建组向导来创建组. 可

SCOM 2012知识分享-16:管理任务窗格

适应平台:System Center 2012 RTM/SP1 ------------------------------------------------------------------------------------------------------ 在 System Center 2012 – Operations Manager 操作控制台中,"任务"窗格提供了指向任务的链接. 任务是在 Operations Manager 代理上运行的操作控制台中用户启动的操作