<分区>
我理解从基类派生时使用 virtual 关键字的要求,以避免与菱形继承相关的歧义问题。
但是,我的问题是,为什么这不是派生类时 C++ 中的默认行为,无论是否存在菱形问题?
在不存在菱形继承(钻石问题)的情况下使用“虚拟”关键字是否有任何“危害”?
<分区>
我理解从基类派生时使用 virtual 关键字的要求,以避免与菱形继承相关的歧义问题。
但是,我的问题是,为什么这不是派生类时 C++ 中的默认行为,无论是否存在菱形问题?
在不存在菱形继承(钻石问题)的情况下使用“虚拟”关键字是否有任何“危害”?
最佳答案
虚拟继承具有运行时开销:转换指针需要进行仅在运行时才知道的调整,而对于非虚拟继承,则可以在编译时知道。它还会使派生类变得更加复杂,因为虚拟基类是由最终派生类初始化的,而不是(必然)直接从它们继承的类。
因此,只有当您特别想要菱形结构时才会需要它;必须记住指定非虚拟继承以避免隐藏的开销会很痛苦。 C++ 通常遵循您不应该为不需要的功能付费的原则。
关于c++ - 为什么 'virtual' 继承不是默认行为?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/22083996/