换句话说,为什么编译器不能“知道”如果在派生类中更改了函数的定义,并且指向该派生类的动态分配内存的指针调用了更改后的函数,则应调用该特定函数而不是基类的函数?在哪些情况下,没有使用virtual关键字对程序员有利?
"virtual"关键字告诉编译器实现动态分派。这就是语言设计的方式。 如果没有这个关键字,编译器就不知道是否要实现动态分派。虚拟或动态分派的缺点在于: - 它有轻微的性能惩罚。大多数编译器会使用vtable和vptr机制来实现动态分派,在动态分派的情况下需要额外的间接寻址才能决定调用哪个适当的函数。 - 它使你的类非POD。
virtual
的好处是什么?没有额外开销! - Mark Garcia