为什么虚拟关键字需要的?(Why is the virtual keyword needed?)

2019-07-04 04:48发布

换句话说,为什么不只是编译器“知道”,如果一个函数的定义在派生类中被改变,并动态分配一个指针派生类的内存调用变更的功能,那么特别是函数应该被调用,而不是基类的?

在什么情况下不会有虚拟关键字工作提高到一个程序员的利益?

Answer 1:

virtual关键字告诉编译器实现动态调度 。那就是语言是如何设计的。 如果没有这样的关键字,编译器将不知道是否要实现动态调度。

不利的一面virtual或动态分配一般是,

  • 它有轻微的性能损失。 大多数编译器将使用虚表的vptr和机制,在相应的函数调用是通过虚表决定的,因此,需要在动态调度的情况下,额外的间接实现动态调度。
  • 它使你的类非POD。


Answer 2:

一个理由:

考虑设在单独的模块基类,像库。

而在应用程序中派生类。

编译给定函数库中如何将编译器知道/必须是虚拟的。



Answer 3:

一个C ++的主要设计原则是, C ++不为不使用的(“零开销原则”)功能招致的开销 。 这是因为一家专注于高性能

这就是为什么你需要选择加入到像虚函数的功能,而在像Java语言,功能默认情况下虚拟的。



Answer 4:

编译器不知道,因为它不能。 这可能是你的意图,不使用虚函数,因为总是与每一个功能相关的成本。



文章来源: Why is the virtual keyword needed?
标签: c++ virtual