您的位置:首页 > 编程语言 > C语言/C++

为什么C++支持重载,C语言不支持

2018-03-30 15:43 513 查看
我们都知道C++语言支持重载,而C语言不支持

可是为什么C++中可以支持函数重载,而在C语言中不支持呢?

函数重载

首先来看,什么是函数重载:在同一作用域类,一组函数的函数名相同,参数列表不同(个数不同/类型不

同),返回值可同可不同。简单的说就是函数名相同,参数列表不同



其实是这样,C++在编译时会对函数名进行优化,对于参数不同的同名函数对应的优化后的函数为_Z
[fun][list]

N:代表函数名长度
fun:函数名
list:所有参数的首字母


例如上面那段代码在linux下编译成目标文件,再使用nm指令查看符号信息如下图:



【深入了解】了解更多关于C++函数名称修饰规则

扩展阅读

C&C++的起源历史

C++历史: C&C++的起源历史

语言的发展是一个逐步递进的过程,C++ 是直接从 C 语言发展过来的,而 C 语言是从 B 语言发展过来的,B 语言是 BCPL 的一个解释性后代,BCPL 是 Basic CPL。其中最有趣的是 CPL 中 C 的由来,由于当时这个语言是剑桥大学和伦敦大学合作开发的,在伦敦的人员加入之前,C 表示剑桥,伦敦人员加入之后,C 表示 Combined 组合。还有一种非正式的说法,C 表示 Christopher,因为 Christopher 是 CPL 背后的主要动力。

最初导致C++诞生的原因是在Bjarne博士等人试图去分析UNIX的内核的时候,这项工作开始于1979年4月,当时由于没有合适的工具能够有效的分析由于内核分布而造成的网络流量,以及怎样将内核模块化。同年10月,Bjarne博士完成了一个可以运行的预处理程序,称之为Cpre,它为C加上了类似Simula的类机制。在这个过程中,Bjarne博士开始思考是不是要开发一种新的语言,当时贝尔实验室对这个想法很感兴趣,就让Bjarne博士等人组成一个开发小组,专门进行研究。

当时不是叫做C++,而是C with class,这是把它当作一种C语言的有效扩充。由于当时C语言在编程界居于老大的地位,要想发展一种新的语言,最强大的竞争对手就是C语言,所以当时有两个问题最受关注:C++要在运行时间、代码紧凑性和数据紧凑性方面能够与C语言相媲美,但是还要尽量避免在语言应用领域的限制。在这种情况下,一个很自然的想法就是让C++从C语言继承过来,但是我们的Bjarne博士更具有先见之明,他为了避免受到C语言的局限性,参考了很多的语言,例如:从Simula继承了类的概念,从Algol68继承了运算符重载、引用以及在任何地方声明变量的能力,从BCPL获得了//注释,从Ada得到了模板、名字空间,从Ada、Clu和ML取来了异常。





缺省参数

// 全缺省参数
int Add1 (int a = 0, int b = 0)
{
return a + b;
}
// 半缺省参数
int Add2 (int a, int b = 0)
{
return a + b;
}


命名空间 C++命名空间

命名空间(namespace)是一种描述逻辑分组的机制,可以将按某些标准在逻辑上属于同一个集团的声明放在同一个命名空间中。

named-namespace-definition:

namespace identifier { namespace-body }


unnamed-namespace-definition:

namespace { namespace-body }


namespace-body:

declaration-seq
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签:  C++ 函数重载