c++中函数重在的实现原理

来源:互联网 发布:积分统计软件 编辑:程序博客网 时间:2024/05/22 13:12

1.剖析C++是如何实现重载的?

#include<iostream>
using namespace std;
int Add(int &a, int &b)
{
return a + b;
}
double Add(double &a, double &b)
{
return a + b;
}
int main()
{
int a = 2;
int b = 3;
int c = 0;
double m = 1.20;
double n = 3.21;
double z = 0.00;
c = Add(a, b);
z = Add(m, n);
cout <<"c = "<<c<<endl;
cout <<"z = "<<z<<endl;
}

如上代码是分别求a与b、m与n的和他们的函数名相同可是参数类型都不相同,如果是在C中一定会出错,但是在c++中有函数重载就不会出错,那么究竟是怎么实现函数重载的?函数重载其实是代码在编译期间会对函数进行重命名,函数int Add(int &a, int &b)会被重命名为?Add@@YAHAAHO@Z,而函数double Add(double &a, double &b)则会被重命名为?Add@@YANAANO@Z,可以看出两个函数名虽然相同但是重命名后它们还是有区别的,所以调用函数时不会出错,这就是函数重载。


2.解析面试题:在C++ 程序中调用被 C 编译器编译后的函数,为什么要加 extern “C”声明?
因为在C语言中不支持函数重载,而在c++中支持函数重载。函数在经过被c++编译过后会被重命名,而该名字与被C语言编译过的名字不同。建设某个函数原型为int Add(int &a, int &b),函数被c++编译过后在库中的名字为 ? Add@@YAHAAHO@Z;而函数被C语言编译过后在库中的名字为_Add。所以为了解决名字匹配问题,c++提供了C连接交换指定符号extern "C"。

原创粉丝点击