我有以下代码:
class Pet {
public:
virtual string speak() const { return ""; }
};
class Dog : public Pet {
public:
string speak() const { return "Bark!"; }
};
int main() {
Dog ralph;
Pet* p1 = &ralph;
Pet& p2 = ralph;
Pet p3;
// Late binding for both:
cout << "p1->speak() = " << p1->speak() <<endl;
cout << "p2.speak() = " << p2.speak() << endl;
// Early binding (probably):
cout << "p3.speak() = " << p3.speak() << endl;
}
有人要求我确定编译器是对最终函数调用使用早期绑定(bind)还是后期绑定(bind)。我在网上搜索过,但没有找到任何可以帮助我的东西。谁能告诉我如何执行此任务?
最佳答案
您可以查看反汇编,看它是否似乎是通过 vtable 重定向。
线索是它是直接调用函数地址(早期绑定(bind))还是调用计算地址(后期绑定(bind))。另一种可能性是该函数是内联的,您可以将其视为早期绑定(bind)。
当然,该标准并未规定实现细节,可能还有其他可能性,但这涵盖了“正常”实现。
关于c++ - 如何确定编译器是对虚函数使用早期绑定(bind)还是后期绑定(bind)?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/7611168/