C++函数重载
学习过C++的朋友都知道C++支持函数的重载,什么叫重载呢,就是我们写代码时有时会用两个相同名字的函数,编译器在编译时会根据不同的情况调用不同的函数。而这种情况在C语言中是不允许的,但是在C++里面是可以的。这里我们简单了解一下。
C++函数重载必须要满足的条件是:
1.函数名相同。
2.参数列表相同。
1.C++函数能够重载它的底层是怎么实现的呢?
我们来看一段很简单的代码:
#include <iostream>
using namespace std;
int Max(int a, int b) //?Max@@YAHHH@Z
{
return a > b ? a : b;
}
char Max(char a, char b) //?Max@@YADDD@Z
{
return a > b ? a : b;
}
double Max(double a, double b) //?Max@@YANNN@Z
{
return a > b ? a : b;
}
void main()
{
cout << Max(10, 20) << endl;
cout << Max('A', 'B') << endl;
cout << Max(12.34, 20.34) << endl;
}
我们在执行这段代码时其实是可以得到正确结果的,因为C++在后台对三个函数名其实做了个重写,也叫函数原型。也就是代码上的注释,我们不必太太太在意,因为在不同的编译器下它的重写规则是不同的。我们这里不重点展开它的函数原型是怎么来的。简单理解就是在编译时使用了C++的调用约定,重写了函数的名字,导致每个函数的名字是唯一的,这样对计算机来说,就是你需要用哪个函数它就给你调哪个函数。可以这样说,写的代码三个函数的名字是给人看的,人家计算机有自己的一套命名规则,人家是不认识咱们写的函数名的嘿嘿。
2. 那C语言为什么不能进行函数重载呢?
从上面我们知道,函数重载的本质就是在计算机在后台重写了函数的名字,而C语言的调用约定下也会改写函数的名字。但是,C有点懒,它改写时只会在函数名前加上下划线,即**_Max**。这样一来,三个函数的名字都被改写成了_Max。那么计算机面对三个一模一样的函数时该调用哪个呢。显然是不可以的。