一个类可以在其成员初始化列表中初始化其非立即基类吗?

Posted

技术标签:

【中文标题】一个类可以在其成员初始化列表中初始化其非立即基类吗?【英文标题】:Can a class initialize its non-immediate base classes in its member initialization list? 【发布时间】:2013-02-05 21:43:11 【问题描述】:

以下代码摘自Apache C++ Standard Library User's Guide

class DerivedOutputStream : public std::ostream 
  public:
    DerivedOutputStream():
      std::ios(0), std::ostream(&dsb)         //1
    // ...
  private:
    DerivedStreamBuf dsb;
    // ...
;

请注意std::ios 不是DerivedOutputStream 的直接基类,但它出现在成员初始化列表中。

我认为这是不正确的,是吗?

【问题讨论】:

【参考方案1】:

如果它是一个虚拟基类是正确的。虚拟基是从最派生的类初始化的。

【讨论】:

可能是,根据下图:en.cppreference.com/w/cpp/io

以上是关于一个类可以在其成员初始化列表中初始化其非立即基类吗?的主要内容,如果未能解决你的问题,请参考以下文章

派生类:在初始化列表中使用基类成员

在其派生类C++的构造函数中调用基类的构造函数[重复]

为啥不能在派生类的构造函数初始化列表中初始化基类的数据成员?

C ++:如何在派生类中定义基类构造函数,如果基构造函数具有带有私有成员的初始化列表[重复]

C ++为所有派生类初始化抽象基类受保护成员

虚函数总结