为什么关于虚拟关键字的所有模糊?

时间:2011-05-12 17:24:15

标签: c++ performance boost virtual

在阅读一个或另一个boost库的文档时,我遇到了一些语句,提示virtual关键字是邪恶的。请参阅http://www.boost.org/doc/libs/1_46_1/libs/msm/doc/HTML/ch03s05.html,例如:

  

不会说MSM会强迫虚拟关键字流下你的喉咙!

根据http://www.parashift.com/c++-faq-lite/virtual-functions.html#faq-20.4,虚拟关键字真的不是那么糟糕,我对它的感觉是一样的。

为什么有些推特人认为虚拟函数调用是最糟糕的事情?我的印象是,提升家伙真的是 C ++专家,因此必须有一些关于它的东西。

3 个答案:

答案 0 :(得分:3)

存在静态多态性优于动态多态的情况。这就是克里斯托夫在这里所说的。没什么。

答案 1 :(得分:1)

运行时多态性有一个额外的成本,即vtable。一旦在类型中添加vtable,就无法将其删除。 C ++的核心优势之一是“你只需支付你使用的费用”。因此,为了尽可能保持对象的精简,几个库尽可能避免虚函数。不是因为它是邪恶的,而是因为你可能不想要它。

答案 2 :(得分:0)

我认为推论是,MSM不会通过其内部工作或结构强制您将自己代码的成员声明为虚拟,或者覆盖他们的代码。有些库需要这样,例如动态创建类的“代理”的库,例如模拟或惰性加载器。