

文章目录
网上呢一直流传着这么两个说法,我国有两个体育项目大家根本不用看,也不用担心。一个是乒乓球,一个是男足。前者是“谁也赢不了!”,后者是“谁也赢不了!

自然语言中,一个词可以有多重含义,人们可以通过上下文来判断该词真实的含义,即该词被重载了

通过上述两个生活小案例,相信你对函数重载一定有了一个基本的概念,接下去让我们正式来学习一下函数重载💻
【函数重载】:是函数的一种特殊情况,C++允许在同一作用域中声明几个功能类似的同名函数,这些同名函数的形参列表(参数个数 或 类型 或 类型顺序)不同,常用来处理实现功能类似数据类型不同的问题
.cpp的文件中,我们才可以进行函数重载

对于C++中的函数重载来说,随着不同类型或者个数的实参传入,编译器会自动识别向对应的函数去进行一个调用
int Add(int x, int y)
{
return x + y;
}
double Add(double x, double y)
{
return x + y;
}
int ret1 = Add(1, 2);
double ret2 = Add(1.1, 2.2);

int Add(int x, int y)
{
return x + y;
}
int Add(int x, int y, int z)
{
return x + y + z;
}
int ret1 = Add(1, 2);
int ret2 = Add(1, 2, 3);

void Print(int x, char c)
{
cout << x << " ";
cout << c << " ";
cout << endl;
}
void Print(char c, int x)
{
cout << c << " ";
cout << x << " ";
cout << endl;
}
Print(1, 'x');
Print('y', 2);

在观察函数重载的原理之前,我们来浅浅回顾一下C语言中所介绍的程序编译+链接全过程
test.c就会形成一个目标文件test.o.o的目标文件
.exe,在Linux下是a.out
现在我们要去思考的一个点是,假如
test.cpp中使用到了add.c中的函数Add,而且恰好这个函数还进行了函数重载,那编译器是怎么知道要去add.c中寻找这个重载函数的呢❓
首先你要清楚在编译阶段后的【链接】阶段,它的功能是什么
test.o中调用到了Add函数,此时它就会去其他目标文件中通过一定的方式识别找到它所匹配调用的这个重载函数,然后通过将两个目标文件的符号表进行合并也就形成了最后的可执行文件
但是还有一点很困惑的是,编译器是怎样的方式去识别的呢?我们可以通过查看【反汇编】代码来观察一下
首先我们来看下Linux平台下对于重载函数的反汇编指令是怎样的
objdump。这个也是Linux下的一个指令,感兴趣的可以去了解一下 链接
<_Z3Addii>,第二个函数则变成了<_Z3Adddd>这是为什么呢?

所以我们可以得出结论:对于C语言来说是不存在函数名修饰的,只有C++支持,会将函数参数类型信息添加到修改后的名字中

Linux中查看完之后我们再来Windows中来看看,为什么要先看Linux呢?看下去你就知道了

.cpp的文件来说,函数名在修饰之后变得是异常复杂。可是对于.c的文件来说,使用的还是原先的Add函数名,没有发生变化

看了上面这些我想应该也够了,如果你还想要再深度地进行了解的话可以看看这篇文章 —— 链接
通过上面的观察我们就可以来总结一下有关函数名的修饰规则
【_Z + 函数长度 + 函数名 + 类型首字母】
【? + 函数名 + @@YA + 返回值 + 参数1 + 参数2 + @Z】,int类型对应的是字母H,void类型对应的是字母X,double类型对应的是字母N。扩展:float类型对应的是字母M(可以当做了解一下)
在看了上面有关C++函数重载的原理之后,就可以回答为何C语言不支持函数重载
通过研究了函数重载的原理之后,最后再来说说比较容易误解的写法,你认为下面的两个函数构成函数重载吗?
int Add(int x, int y)
{
return x + y;
}
double Add(int x, int y)
{
return x + y;
}


最后我们来总结一下本文所学习的的内容📖
以上就是本文要介绍的所有内容,感谢您的阅读🌹

我需要在客户计算机上运行Ruby应用程序。通常需要几天才能完成(复制大备份文件)。问题是如果启用sleep,它会中断应用程序。否则,计算机将持续运行数周,直到我下次访问为止。有什么方法可以防止执行期间休眠并让Windows在执行后休眠吗?欢迎任何疯狂的想法;-) 最佳答案 Here建议使用SetThreadExecutionStateWinAPI函数,使应用程序能够通知系统它正在使用中,从而防止系统在应用程序运行时进入休眠状态或关闭显示。像这样的东西:require'Win32API'ES_AWAYMODE_REQUIRED=0x0
我想在一个没有Sass引擎的类中使用Sass颜色函数。我已经在项目中使用了sassgem,所以我认为搭载会像以下一样简单:classRectangleincludeSass::Script::FunctionsdefcolorSass::Script::Color.new([0x82,0x39,0x06])enddefrender#hamlengineexecutedwithcontextofself#sothatwithintemlateicouldcall#%stop{offset:'0%',stop:{color:lighten(color)}}endend更新:参见上面的#re
我正在尝试用ruby中的gsub函数替换字符串中的某些单词,但有时效果很好,在某些情况下会出现此错误?这种格式有什么问题吗NoMethodError(undefinedmethod`gsub!'fornil:NilClass):模型.rbclassTest"replacethisID1",WAY=>"replacethisID2andID3",DELTA=>"replacethisID4"}end另一个模型.rbclassCheck 最佳答案 啊,我找到了!gsub!是一个非常奇怪的方法。首先,它替换了字符串,所以它实际上修改了
我有一些代码在几个不同的位置之一运行:作为具有调试输出的命令行工具,作为不接受任何输出的更大程序的一部分,以及在Rails环境中。有时我需要根据代码的位置对代码进行细微的更改,我意识到以下样式似乎可行:print"Testingnestedfunctionsdefined\n"CLI=trueifCLIdeftest_printprint"CommandLineVersion\n"endelsedeftest_printprint"ReleaseVersion\n"endendtest_print()这导致:TestingnestedfunctionsdefinedCommandLin
这似乎非常适得其反,因为太多的gem会在window上破裂。我一直在处理很多mysql和ruby-mysqlgem问题(gem本身发生段错误,一个名为UnixSocket的类显然在Windows机器上不能正常工作,等等)。我只是在浪费时间吗?我应该转向不同的脚本语言吗? 最佳答案 我在Windows上使用Ruby的经验很少,但是当我开始使用Ruby时,我是在Windows上,我的总体印象是它不是Windows原生系统。因此,在主要使用Windows多年之后,开始使用Ruby促使我切换回原来的系统Unix,这次是Linux。Rub
导读:随着叮咚买菜业务的发展,不同的业务场景对数据分析提出了不同的需求,他们希望引入一款实时OLAP数据库,构建一个灵活的多维实时查询和分析的平台,统一数据的接入和查询方案,解决各业务线对数据高效实时查询和精细化运营的需求。经过调研选型,最终引入ApacheDoris作为最终的OLAP分析引擎,Doris作为核心的OLAP引擎支持复杂地分析操作、提供多维的数据视图,在叮咚买菜数十个业务场景中广泛应用。作者|叮咚买菜资深数据工程师韩青叮咚买菜创立于2017年5月,是一家专注美好食物的创业公司。叮咚买菜专注吃的事业,为满足更多人“想吃什么”而努力,通过美好食材的供应、美好滋味的开发以及美食品牌的孵
电脑0x0000001A蓝屏错误怎么U盘重装系统教学分享。有用户电脑开机之后遇到了系统蓝屏的情况。系统蓝屏问题很多时候都是系统bug,只有通过重装系统来进行解决。那么蓝屏问题如何通过U盘重装新系统来解决呢?来看看以下的详细操作方法教学吧。 准备工作: 1、U盘一个(尽量使用8G以上的U盘)。 2、一台正常联网可使用的电脑。 3、ghost或ISO系统镜像文件(Win10系统下载_Win10专业版_windows10正式版下载-系统之家)。 4、在本页面下载U盘启动盘制作工具:系统之家U盘启动工具。 U盘启动盘制作步骤: 注意:制作期间,U盘会被格式化,因此U盘中的重要文件请注
如何在Ruby中按名称传递函数?(我使用Ruby才几个小时,所以我还在想办法。)nums=[1,2,3,4]#Thisworks,butismoreverbosethanI'dlikenums.eachdo|i|putsiend#InJS,Icouldjustdosomethinglike:#nums.forEach(console.log)#InF#,itwouldbesomethinglike:#List.iternums(printf"%A")#InRuby,IwishIcoulddosomethinglike:nums.eachputs在Ruby中能不能做到类似的简洁?我可以只
在应用开发中,有时候我们需要获取系统的设备信息,用于数据上报和行为分析。那在鸿蒙系统中,我们应该怎么去获取设备的系统信息呢,比如说获取手机的系统版本号、手机的制造商、手机型号等数据。1、获取方式这里分为两种情况,一种是设备信息的获取,一种是系统信息的获取。1.1、获取设备信息获取设备信息,鸿蒙的SDK包为我们提供了DeviceInfo类,通过该类的一些静态方法,可以获取设备信息,DeviceInfo类的包路径为:ohos.system.DeviceInfo.具体的方法如下:ModifierandTypeMethodDescriptionstatic StringgetAbiList()Obt
之前在培训新生的时候,windows环境下配置opencv环境一直教的都是网上主流的vsstudio配置属性表,但是这个似乎对新生来说难度略高(虽然个人觉得完全是他们自己的问题),加之暑假之后对cmake实在是爱不释手,且这样配置确实十分简单(其实都不需要配置),故斗胆妄言vscode下配置CV之法。其实极为简单,图比较多所以很长。如果你看此文还配不好,你应该思考一下是不是自己的问题。闲话少说,直接开始。0.CMkae简介有的人到大二了都不知道cmake是什么,我不说是谁。CMake是一个开源免费并且跨平台的构建工具,可以用简单的语句来描述所有平台的编译过程。它能够根据当前所在平台输出对应的m