c++ - 为什么 'virtual' 继承不是默认行为?

标签 c++ inheritance virtual multiple-inheritance diamond-problem

<分区>

我理解从基类派生时使用 virtual 关键字的要求,以避免与菱形继承相关的歧义问题。

但是,我的问题是,为什么这不是派生类时 C++ 中的默认行为,无论是否存在菱形问题?

在不存在菱形继承(钻石问题)的情况下使用“虚拟”关键字是否有任何“危害”?

最佳答案

虚拟继承具有运行时开销:转换指针需要进行仅在运行时才知道的调整,而对于非虚拟继承,则可以在编译时知道。它还会使派生类变得更加复杂,因为虚拟基类是由最终派生类初始化的,而不是(必然)直接从它们继承的类。

因此,只有当您特别想要菱形结构时才会需要它;必须记住指定非虚拟继承以避免隐藏的开销会很痛苦。 C++ 通常遵循您不应该为不需要的功能付费的原则。

关于c++ - 为什么 'virtual' 继承不是默认行为?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/22083996/

相关文章:

c++ - 错误 : expected primary-expression before 'char'

连接到 IPv4 地址时 C++ winsock 连接被拒绝

c++ - ID2D1DeviceContext EndDraw D2DERR_WRONG_STATE 绘制矩形后

c++ - 什么时候适合使用继承?

class - 为什么 Kotlin 修饰符 'open' 与 'data' 不兼容?

Wordpress 插件生成虚拟页面并使用主题模板

c++ - 如果在派生类中定义了虚拟析构函数,而不是层次结构的顶部怎么办? C++

c++ - 为什么构造不完整类型的 std::unique_ptr 编译?

c++ - 多重继承,还是其他什么?

c++ - C++中的非虚拟指针?