【发布时间】:2010-02-09 07:46:51
【问题描述】:
如果没有函数重载,函数名作为函数代码的地址,当函数被调用时,使用函数名很容易找到它的地址。然而,通过函数重载,程序如何准确地找到正确的函数地址?是否有一个类似于虚拟表的隐藏表来存储重载函数及其地址?非常感谢!
【问题讨论】:
-
我认为建议改名的人被误导了。编译器并没有破坏名称,只是在被破坏的名称中进行查找。它需要从可用的方法中推断出正确的类型。一旦这样做,它就已经知道要调用哪个方法。然后,它使用经过修改的名称作为 last 步骤。名称修改不是确定调用哪个重载函数的先决条件。
-
也许这条评论应该出现在您所指的错误答案之一中?
-
太多了,就放在这里了。
-
完全正确。给定
void foo(int);和void foo(std::string);,foo(1.0f)将调用第一个。 “名称修改”建议会让编译器查找? foo(float)并失败。 -
如果您想要重载函数的地址,有时您必须将该地址转换为适当的类型。假设你有两个函数 foo,一个是 int,一个是 float,你想要一个 int 的地址,你写
static_cast<void(*)(int)>(&foo)。
标签: c++ function overloading