【问题标题】:Is it legal to use the address of a member to initialize a base-class?使用成员的地址来初始化基类是否合法?
【发布时间】:2018-06-03 13:52:13
【问题描述】:

这段代码合法吗?:

class BaseClass
{
  public:
    BaseClass (int *p) : p_ (p) { }

  private:
    int *p_;
};

class SubClass : public BaseClass
{
  public:
    SubClass () : BaseClass (&i_), i_ (123) {}

  private:
    int i_;
};

众所周知,基类是在子类的成员之前构建的,这就是我想知道的原因。

【问题讨论】:

标签: c++ initialization undefined-behavior


【解决方案1】:

是的,这很好:虽然SubClass::i(的相关实例)的生命周期尚未开始,但它的存储存在,并且可以形成指向它的指针(尽管不是@ 987654321@尚未)。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2019-09-28
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2016-08-02
    • 1970-01-01
    相关资源
    最近更新 更多