我有一个带有 1 个虚函数的基类
class Base
{
public:
virtual void print() {
cout<<"IN BASE\n";
}
}
现在我使用
创建它的对象Base b
并调用
b.print();
这是动态绑定(bind)吗,因为“基”类包含 1 个虚函数并创建了它的 VTable..
最佳答案
在创建对象的相同上下文中,编译器不需要使用虚拟分派(dispatch),因为它知道确切的类型。但这与虚函数的数量无关(是的,只要至少有一个,编译器就会生成一个 vtable 并在你的对象中存储一个 vptr ).
Base b;
b.print(); // can be optimized to b.Base::print(),
// with no virtual dispatch
void f( Base& b ) {
b.print(); // must use virtual dispatch (ignoring potential inlining)
}
关于c++ - 虚拟函数中的动态绑定(bind) C++,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/11800759/