gpt4 book ai didi

c++ - 对派生对象的 C++ 虚函数调用是否通过 vtable?

转载 作者:塔克拉玛干 更新时间:2023-11-02 23:03:11 24 4
gpt4 key购买 nike

在下面的代码中,它通过指向派生对象的指针调用虚函数 foo。这个调用会通过 vtable 还是会直接调用 B::foo

如果它通过一个 vtable,让它直接调用 B::foo 的 C++ 惯用方法是什么?我知道在这种情况下我总是指向 B

Class A
{
public:
virtual void foo() {}
};

class B : public A
{
public:
virtual void foo() {}
};


int main()
{
B* b = new B();
b->foo();
}

最佳答案

如果您启用了优化,大多数编译器都足够聪明,可以消除这种情况下的间接调用。但只是因为您刚刚创建了对象并且编译器知道动态类型;可能会出现您知道动态类型而编译器不知道的情况。

关于c++ - 对派生对象的 C++ 虚函数调用是否通过 vtable?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/4464144/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com