gpt4 book ai didi

c++ - 当一个类有一些虚方法时,它的所有方法都使用虚表吗?

转载 作者:搜寻专家 更新时间:2023-10-31 00:08:57 26 4
gpt4 key购买 nike

在下面的这个例子中,Type 有一个虚拟方法,所以它有一个 vtable。但是,Type::Bar() 不是虚拟的。调用 Bar() 时,调用是否也通过 vtable 机制,还是仅适用于 Foo()?

struct Base {
virtual void Foo() {}
}

struct Type : Base {
void Foo() override {}
void Bar() {}
}

Base* b = new Type();
Type* t = static_cast<Type*>(b);
t->Bar(); // Does this use a vtable?

最佳答案

However, Type::Bar() is not virtual. When calling Bar(), does the call also go through the vtable mechanism, or will it only apply to Foo()?

调用非函数的函数是在编译时决定的。因此,没有充分的理由让实现选择 vtable 来分派(dispatch)对非 virtual 函数的调用。但是,该标准并不禁止实现使用 vtable,即使对于非 virtual 函数也是如此。

@EJP 说得更好:

该标准不要求实现将 vtable 用于虚函数。这是一个实现细节。使用 vtables 的任何理智实现都不会通过包含非虚函数来浪费它们的空间

关于c++ - 当一个类有一些虚方法时,它的所有方法都使用虚表吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/46029258/

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