在 C++ 中为虚函数禁用动态绑定(创建虚表)

Pra*_*mar 5 c++ performance vtable c++11

我最近遇到了一个 C++ 面试问题,这让我很感兴趣:

假设您错误地将某个 C++ 成员函数声明为虚拟函数,但是(可能出于性能原因)您希望阻止编译器为该函数创建 v 表。也就是说,禁用动态函数绑定以支持静态绑定。

你将如何实现这一目标?另外,是否有一些 C++11 特定的方法来这样做?

bas*_*sav -1

您可以通过禁用 RTTI 来避免开销...有一个编译时开关。

一旦 RTTI 禁用标志启用,对于dynamic_cast/typeid 来说,不会有任何虚拟表调度的开销。

  • 没有 RTTI 并不意味着没有 vtable。 (2认同)