【问题标题】:Does any of C++ implementation make use of multiple inheritance internally?是否有任何 C++ 实现在内部使用多重继承?
【发布时间】:2018-01-11 17:54:57
【问题描述】:

只是一个简单的愚蠢问题:

我想知道 C++ 是否在内部利用了虚拟继承提供的多重继承特性。我确信对于模板化的实现,比如 STL 提供的数据结构(例如 std::vector )不能使用这样的特性,但是像流这样的其他对象呢。

我知道在某些情况下多重继承可能很方便(例如,对于交叉委托),但我觉得如果 C++ 开发人员决定避免在他们的代码中使用这种特性,我应该避免它。

谢谢大家!

【问题讨论】:

  • 标准流类。
  • 不要用感觉来做编程决定。 appeal to authority 也是一个逻辑谬误。
  • @zzyz 实际上,我已经使用了几个框架,比如现在已经不复存在的 Reuters Triarch,它们很好地利用了 MI - 这真的取决于设计师的技能。
  • 实现,例如 LLVM libc++ 和 GNU libstdc++,在大约十几个地方使用多重继承,包括在 std::vector 的实现细节中(是什么让你认为它们“不能”在那里使用它?)虚拟继承 - 不是那么多,它只是流。

标签: c++ multiple-inheritance internals


【解决方案1】:

iostream 使用多重和虚拟继承;特别是std::basic_iostream继承自std::basic_istreamstd::basic_ostream,两者都继承自std::basic_ios(带虚继承)。

话虽如此,iostream 并未被广泛认为是出色设计的示例,因此请从表面上理解此信息(= 是的,该标准包括使用多重继承和虚拟继承的类),而不是作为良好实践的标志.

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2020-07-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2016-10-02
    • 1970-01-01
    • 2019-05-27
    相关资源
    最近更新 更多