为什么需要虚拟关键字?

Bob*_*ohn 5 c++ virtual

换句话说,为什么编译器只是"知道"如果在派生类中更改了函数的定义,并且指向该派生类的动态分配内存的指针调用了更改的函数,那么该函数尤其应该被称为而不是基类?

在什么情况下,虚拟关键字不会对程序员有益?

Alo*_*ave 6

virtualkeyword告诉编译器实现动态调度.这就是语言的设计方式.如果没有这样的关键字,编译器就不会知道是否实现动态调度.

virtual一般的动态调度的缺点是,

  • 它有轻微的性能损失.大多数编译器将使用vtable和vptr机制实现动态调度,其中调用的适当函数是通过vtable决定的,因此在动态调度的情况下需要额外的间接调度.
  • 它使你的班级非POD.

  • 与非虚拟函数相比,虚函数具有"开销",二元搜索比Quicksort更快.这种比较毫无意义,因为它们做了不同的事情.如果需要动态调度,可以使用虚函数,也可以实现自己的动态调度机制,这与虚函数一样"慢". (3认同)