函数重载解析
来源:互联网 发布:淘宝左右香水是正品吗 编辑:程序博客网 时间:2024/05/16 10:24
C++函数重载的实现原理
1.函数重载的概念
在同一个作用域类,一组函数的函数名相同,参数列表不同(参数个数不同/参数类型不同),返回值可同可不同。
2.函数重载的作用
用来在同一个作用域内,用同一个函数名,命名一组功能相似的函数,这样做减少了函数名的数量,避免了名字空间的污染,增强了程序的可读性。
3.函数重载的原理
编译器在编译.cpp文件时,会把当前使用的作用域里的同名函数,根据函数形参的类型和顺序会对函数进行重命名(不同的编译器的重命名标准不一样,但是他们都会把文件中同一个函数名进行重命名。)
用下面的代码分析不同编译器下内部不同的命名方式:
#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(){Add(3, 4);Add(5.2, 3.6);cout << "Add(3, 4)=" << Add(3, 4) << endl;cout << "Add(5.2, 3.6)=" << Add(5.2, 3.6) << endl;system("pause");return 0;}
vs编译器
根据返回值类型(不起决定性作用)+形参类型和顺序(起决定性作用)的规则重命名并记录在.map文件中。
查看方式:“项目”->“属性”->“链接器”->“调试”->“生成映射文件”,选择“是”。然后在当前的项目Debug文件里查看.map文件,结果如下:
从图中可以看出,虽然两个函数的函数名相同,但是他们在符号表中生成的名称不一样,这样构成函数重载。
‘?’表示名称开始,“@@YA”表示参数表开始,“HHH” “NNN”表示返回值类型,两个参数类型,“@Z”表示名称结束。
Linux g++编译器
根据函数名字的字符数+形参类型和顺序的规则重命名记录在符号表中。
当外面的函数被调用时,便会根据记录的结果去寻找符合要求的函数名,进行调用。
阅读全文
0 0
- 成员函数重载解析
- 函数重载解析过程
- 函数模板、重载解析
- 解析函数重载
- 函数重载解析
- 【总结】.函数重载解析过程详解
- 函数重载解析过程详解 (摘老甲克)
- 关于函数重载解析笔记001
- 浅谈C++函数重载的解析过程
- 重载与构造函数的解析
- 解析成员函数重载-- 隐藏-- 覆盖
- Const 重载解析(const参数重载 和 const成员函数重载)
- Const 重载解析(const参数重载 和 const成员函数重载)
- Const 重载解析(const参数重载 和 const成员函数重载)
- 重载解析
- 浅谈模板函数的重载解析优先顺序
- 浅谈模板函数的重载解析优先顺序
- 浅谈模板函数的重载解析优先顺序
- Linux的常见指令
- strcpy函数原型
- JAVA的Object
- 最小生成树树--普里姆算法
- (六)linux下c语言实现静态库的开发
- 函数重载解析
- SPOJ
- 今日计划
- 数据结构8:希尔排序专题
- Java 生成随机日期,时间
- Codeforces-417D总结&题解
- servletServletConfigAndServletContext
- CF734E:Anton and Tree(缩点 & 直径)
- LeetCode500. Keyboard Row