function - 具有虚函数的类中的非虚函数

标签 function inheritance polymorphism virtual vtable

简单问题:非虚函数是否会产生在具有其他虚函数的类中进行 vtbl 查找的成本?例如:

Class A
{ 
  virtual void init();
  void update();
};

Class B : public A
{
  void init();
}

A* = new B();
A->init();

while(true)
{
  A->update();
}

更新调用会产生 vtbl 查找的成本吗?这段代码对性能非常敏感,因此我需要避免虚函数调用。谢谢!

最佳答案

没有。 update() 不会出现在 vtable 中。维基百科是这么说的:“请注意,那些在声明中不携带关键字 virtual 的函数......通常不会出现在 vtable 中。默认构造函数所带来的特殊情况也有异常(exception)。”

http://en.wikipedia.org/wiki/Virtual_method_table

关于function - 具有虚函数的类中的非虚函数,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/6378960/

相关文章:

java - 你能用 Java 编写一个需要无参数构造函数或工厂的接口(interface)吗?

Perl:如何调用多重继承中的特定方法?

c# - 继承和构造函数中的错误

architecture - 多重继承、多态性和更新的编程方式

c - 函数中的变量初始化

c - 函数调用的评估顺序

c - 如何在函数中分配双指针的内存?

Scala 并行运行两个函数

haskell - 在 Haskell 中定义多态常量

java - 为什么父构造函数中的方法实际上调用子方法