1.为什么C++支持函数重载,而C语言不支持函数重载呢?
在C/C++中,一个程序要运行起来,需要经历以下几个阶段:预处理、编译、汇编、链接。
//c++
//int add(char a, char b);
//char add(char a, char b);
double add(double a, double b);
int main()
{
//int a = add(10, 20);
//char b = add('a', 'b');
double c = add(2.0, 3.0);
return 0;
}
结论:在linux下,采用gcc编译完成后,函数名字的修饰没有发生改变。
结论:在linux下,采用g++编译完成后,函数名字的修饰发生改变,编译器将函数参数类型信息添加到修改后的名字中。
通过这里就理解了C语言没办法支持重载,因为同名函数没办法区分。而C++是通过函数修饰规则来区分,只要参数不同,修饰出来的名字就不一样,就支持了重载。
另外我们也理解了,为什么函数重载要求参数不同!而跟返回值没关系。