换句话说,为什么编译器只是“知道”如果在派生类中更改了函数的定义,并且指向该派生类的动态分配的内存的指针调用了更改的函数,那么该函数特别是应该调用而不是基类?
在什么情况下,虚拟关键字不能让程序员受益?
答案 0 :(得分:6)
virtual
关键字告诉编译器实现动态调度。这就是语言的设计方式。
如果没有这样的关键字,编译器就不会知道是否实现动态调度。
virtual
或动态调度的缺点是,
答案 1 :(得分:2)
一个原因:
考虑位于单独模块中的基类,如库。
在您的应用程序中派生类。
在编译库时,编译器如何知道给定函数是/必须是虚拟的。
答案 2 :(得分:2)
C ++的主要设计原则之一是C++ does not incur overhead for features that are not used (the "zero-overhead principle")。这是因为关注高性能
这就是为什么你需要选择虚拟功能等功能,而在像Java这样的语言中,默认情况下功能是虚拟的。
答案 3 :(得分:0)
编译器不知道,因为它不能。您可能不打算使用虚拟功能,因为每个功能都会产生相关成本。