c++ - 虚拟函数中的动态绑定(bind) C++

标签 c++

我有一个带有 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/

相关文章:

c++ - 查找具有最大总和的连续子数组

c++ - 使用 C++ 在 opencv 2.3 中放大和限制四边形多边形

c++全局/堆栈实例ctor/dtor在调用静态函数时崩溃

C++ type_info 作为模板(typename)参数

c++ - 比较两个 end() 迭代器

C++:链接器子系统

C++ STL - 遍历序列中的所有内容

c++ - 从 vector 中删除时 vector 迭代器不兼容

c++ - 尾随返回类型中的占位符是否会覆盖初始占位符?

c++ - 如何将 sender() 名称转换为 int