欢迎来到代码驿站!

C代码

当前位置:首页 > 软件编程 > C代码

C++函数重载的定义与原因详解

时间:2022-11-08 09:50:38|栏目:C代码|点击:

引例

如果要求你只能通过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;
}

函数重载的定义

函数重载是指在同一作用域内(可以浅显理解为同一文件内,毕竟函数具有外联系),可以有一组具有相同函数名,不同参数列表的函数,这组函数被称为重载函数。重载函数通常用来命名一组功能相似的函数,这样做减少了函数名的数量,避免了名字空间的污染,对于程序的可读性有很大的好处.

函数重载规则

函数重载的条件:参数个数 或 类型 或 顺序必须不同,函数名不看

image-20220305195013276

为什么C不支持函数重载而C++可以

要想达到函数重载必然解决:函数命名问题 —编译器只需要将用户定义的各种标识符,再加载内存中,对其进行修饰即----内部名称

因为如果不解决函数命名问题,在编译时,就无法形成符号表,同时在链接阶段时,汇总符号表也成问题,毕竟符号表决定了,程序到达调用哪个函数。

image-20220305203830636

内部名称

  • 内部名称:C和C++的语言实现都会按照特定规则,将定义的标识符(各种变量名,函数名,类型,命名空间等)转换为对应的内部名称.通过内部名称编译器就可以识别各种标识符.
  • 对于C,仅在标识符加上前缀‘``_`’即swap()》》_swap()
  • 如果从唯一识别函数作用来看,这种规则没有任何用:毕竟除了static和命名空间域里面的函数,函数都具有外联性,一但在不同文件出现同名函数,程序就CREASH。
  • 对于C++,不同编译器下是不同的:

LINUX:

image-20220305195644165

window:

image-20220305195840804

正是通过这种内部命名规则,函数重载成为可能。

总结

上一篇:C++ decltype 说明符

栏    目:C代码

下一篇:一盘王者的时间用C语言实现三子棋

本文标题:C++函数重载的定义与原因详解

本文地址:http://www.codeinn.net/misctech/218489.html

推荐教程

广告投放 | 联系我们 | 版权申明

重要申明:本站所有的文章、图片、评论等,均由网友发表或上传并维护或收集自网络,属个人行为,与本站立场无关。

如果侵犯了您的权利,请与我们联系,我们将在24小时内进行处理、任何非本站因素导致的法律后果,本站均不负任何责任。

联系QQ:914707363 | 邮箱:codeinn#126.com(#换成@)

Copyright © 2020 代码驿站 版权所有