函数重载
来源:互联网 发布:sql查询字段重复记录 编辑:程序博客网 时间:2024/05/18 01:52
什么是函数重载
在同一个作用域中,如果有多个函数的名字相同,但是形参列表不同——也称函数特征标(参数类型不同或参数个数不同),返回值类型可同也可以不同,我们称之为函数重载。
void testOverload(int a);void testOverload(double a);void testOverload(short a);void testOverload(long a);
编译器在检查函数特征标时,将把类型引用和类型本身视为同一个特征标,如下就不属于函数重载。
double cube(double x);double cube(double &x);
什么是名称修饰
C++如何跟踪每一个重载函数呢?它给这些函数指定了秘密身份。使用C++开发工具中的编译器编写和编译程序时,C++编译器将执行一些神奇的操作——名称修饰(name decoration)或名称矫正(name mangling),它根据函数原型中指定的形参类型对每个函数名进行加密。
虽然testOverload函数名一样,但是他们在符号表中生成的名称不一样。’?’表示名称开始,’?’后边是函数名,”@@YA”表示参数标开始,”X”表示返回值,后面几位是参数类型,”@Z”表示名称结束。
查看符号表的方法
工程名右击–>属性–>链接器–>调试–>生成映射文件选择是。
重载与作用域
void print(double);void print(char *);void fun(){ void print(int);//新作用域,隐藏了之前的print print("hello world");//错误 print(char *)被隐藏了 print(6.66);//正确 调用的是print(int); print(double)被隐藏了}
当调用print函数时,编译器首先寻找对该函数的声明,找到的是接受int值的那个局部声明,一但在当前作用域中找到了所需要的名字,编译会忽略掉外层作用域中的同名实体。之后就是检查函数调用是否有效。所以,一般将函数的声明都置于全局作用域中。
0 0
- 重载之函数重载
- 函数重载
- 重载函数
- 函数重载
- 函数重载
- 函数重载
- 函数重载
- 函数重载
- 函数重载
- 函数重载
- 函数重载
- 函数重载
- 函数重载
- 重载函数
- 重载函数
- 函数重载
- 重载函数
- 函数重载
- React Native学习路线
- 蓝桥杯 幸运数(暴力?)
- Java的日期与时间(十三)java.time.LocalTime
- 蓝桥杯-9-1九宫格(java)
- Java的日期与时间(十四)java.time.LocalDateTime
- 函数重载
- 如何使用ActionBar+ViewPager实现fragment相互切换
- mysql 在当前表中对某一列数据进行计算后替换
- Vim插件之vim-cpp-enhanced-highlight
- 和为K的组合
- PL/SQL开发基础知识
- Java的日期与时间(十五)java.time.ZonedDateTime
- nodejs里mysql的相关操作
- Java的日期与时间(十六)java.time.format.DateTimeFormatter