环境:Qt5.9
同名不同参,在C 语言中是无法编译通过的,但是C++中却
可以,这种现象叫作重载。
#include <iostream>
using namespace std;
void func(int a)
{
printf("void func(int a)\n");
}
void func(char a)
{
printf("void func(char a)\n");
}
int main()
{
int a;
func(a);
char b;
func(b);
return 0;
}
重载规则:
1.函数名相同
2 参数个数不同,参数的类型不同,参数顺序不同
3 返回值类型,不作为重载的标准
匹配测试:
#include <iostream>
using namespace std;
void print(double a)
{
cout<<a<<endl;
}
void print(int a)
{
cout<<a<<endl;
}
int main()
{
print(1); // print(int)
print(1.1); // print(double)
print('a'); // print(int)
print(1.11f); // print(double)
return 0;
}

C++利用Name Mangling(命名倾轧)技术,来改变函数名,区分参数不同的同名函数。
实现原理:用v-c- i-f- l- d 表示void char int float long double 及其引用。具体平台,实现
有差异。
对生成的可执行文件a.out,采用命令nm a.out 查看符号表,显示两个重载的函数
在编译后是如何区分的。
0000000000400866 T _Z5printd
000000000040089a T _Z5printi

本文深入探讨了C++中的函数重载机制,对比了C语言的限制,详细解析了重载规则,包括函数名相同但参数个数、类型或顺序不同的情况,并通过实例演示了如何利用NameMangling技术来区分重载函数。
877





