在C++里,相同的函数名可以对应不同的函数。
一.使用
需要注意的是,C++规定,函数重载形参的数量、类型可以不同,但返回值必须相同。
这是因为代码的处理是从右往左的,如果返回值不同,但又不知道左边用类型来接收函数,那么就无法确定使用哪个函数了。
使用示例如下:
二.原理
为什么C++支持函数重载而C不支持呢。
这是由于它们两个不同的函数名修饰规则决定的,这发生在编译的阶段。
在C语言里,连接时,函数名会改成_函数名,例如function->_function
而C++里,函数名会带上参数类型,得以区分函数。具体来讲:
比如funtion会被改成?function@@YA***@Z。
? | 代表函数名开始 |
@@YA | 代表参数开始 |
*** | 是function所有的参数种类 |
@Z | 函数结束 |
而关键所在就是***所代表的参数种类。
第一个参数是函数返回值类型,之后就是函数形参类型。
每一种类型均有一个字母与之对应:
X--void | D--char |
E--unsigned char | F--short |
H--int | I--unsigned int |
J--long | K--unsigned long(DWORD) |
M--float | N--double |
N--double | U--struct |
例如:void function(int a, char b) -> ?function@@YAXHD@Z
void function(float a, char b) -> ?function@@YAXMD@Z
这样计算机就能够判断应该调用哪个函数了。
麻烦三连支持一下吧😃 如有错误,敬请斧正