函数重载如何在运行时工作,以及为什么重载?

Jam*_*s C 4 c++ overloading runtime member switch-statement

假设我有一个名为ClothingStore的课程.该类有3个成员函数,指向访问者到商店的正确部门.会员职能是ChildrenDept,MenDept和WomenDept,取决于访客是儿童,男性还是女性.

函数重载可以用来创建3个具有相同名称的函数,比如PointToDept,但是使用不同的输入参数(child,man,woman).

程序执行时在运行时实际发生了什么?

我的猜测是编译器将switch语句添加到程序中,以选择正确的成员函数.但这让我很奇怪 - 使用重载函数时,在程序性能方面是否有任何好处,而不是使用switch语句创建自己的函数?同样,我对该部分的唯一结论是代码可读性.谢谢.

Dav*_*men 6

我的猜测是编译器将switch语句添加到程序中,以选择正确的成员函数.

这是一个糟糕的猜测.C++是一种静态类型语言.变量的类型在运行时不会更改.这意味着决定调用哪个非多态超载是一个总是可以在编译时进行的.标准中的第13.3节" 过载分辨率 "确保了这种情况.当在编译时做出决定时,没有理由做出运行时决定.在大多数实现中具有非多态性重载函数的运行时成本为零.唯一的例外可能是C++解释器.


use*_*421 5

函数重载如何在运行时工作

它没有.它在编译时工作.调用重载函数在运行时与调用非重载函数没有什么不同.

为什么超载?...使用重载函数时,程序性能是否有任何好处,而不是使用switch语句创建自己的函数?

是.与"使用switch语句创建自己的函数"相比,根本没有运行时开销.


rcg*_*ldr 3

来自吉恩的评论:

编译器会看到三个不同的函数,就像它们的名称不同一样。

对于大多数编译器来说,它们的名称不同。这过去被称为名称修改,其中函数名称以返回类型为前缀,以参数类型为后缀。