概述
文章目录
- 前言:
- 引例
- 函数重载的定义
- 函数重载规则
- 为什么C不支持函数重载而C++可以
- 内部名称
前言:
本文介绍C++函数重载与其底层原理
参阅:C++函数重载
博主收集的资料New Young,连载中。
博主收录的问题:New Young
转载请标明出处:New Young
引例
如果要求你只能通过print函数,即能打印字符串,又能打印一个整型。
虽然在C语言中我们可以通过 print_i 和print_s来实现功能。
但是C++更方便。C++支持同一函数名,完成类似的功能的语法。
void print(int i) { cout << "print a integer :" << i << endl; } void print(string str) { cout << "print a string :" << str << endl; } int main() { print(12); print("hello world!"); return 0; }
函数重载的定义
函数重载是指在同一作用域内(可以浅显理解为同一文件内,毕竟函数具有外联系),可以有一组具有相同函数名,不同参数列表的函数,这组函数被称为
重载函数
。重载函数通常用来命名一组功能相似的函数,这样做减少了函数名的数量,避免了名字空间的污染,对于程序的可读性有很大的好处.
函数重载规则
函数重载的条件:
参数个数 或 类型 或 顺序必须不同,函数名不看
为什么C不支持函数重载而C++可以
要想达到函数重载必然解决:函数命名问题 —编译器只需要将用户定义的各种标识符,再加载内存中,对其进行修饰即----内部名称
因为如果不解决函数命名问题,在编译时,就无法形成符号表,同时在链接阶段时,汇总符号表也成问题,毕竟符号表决定了,程序到达调用哪个函数。
内部名称
内部名称:C和C++的语言实现都会按照特定规则,将定义的标识符(各种变量名,函数名,类型,命名空间等)转换为对应的内部名称.通过内部名称编译器就可以识别各种标识符.
对于C,仅在标识符加上前缀‘``_`’即swap()》》_swap()
如果从唯一识别函数作用来看,这种规则没有任何用:毕竟除了static和命名空间域里面的函数,函数都具有外联性,一但在不同文件出现同名函数,程序就CREASH。
对于C++,不同编译器下是不同的:
LINUX:
window:
正是通过这种内部命名规则,函数重载成为可能。
最后
以上就是现实往事为你收集整理的C++入门--函数重载定义与原因前言:引例函数重载的定义函数重载规则为什么C不支持函数重载而C++可以的全部内容,希望文章能够帮你解决C++入门--函数重载定义与原因前言:引例函数重载的定义函数重载规则为什么C不支持函数重载而C++可以所遇到的程序开发问题。
如果觉得靠谱客网站的内容还不错,欢迎将靠谱客网站推荐给程序员好友。
发表评论 取消回复