c++ - 使用成员的地址来初始化基类是否合法?

标签 c++ initialization undefined-behavior

这段代码合法吗?:

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

  private:
    int *p_;
};

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

  private:
    int i_;
};

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

最佳答案

是的,这很好:虽然 SubClass::i 的(相关实例)的 lifetime 尚未开始,但它的存储存在,并且指向它可能会形成(虽然还没有 used for much)。

关于c++ - 使用成员的地址来初始化基类是否合法?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/50667106/

相关文章:

c++ - 使用 CMFCPropertyGrid 在可停靠 Pane 上捕获失去焦点事件

c++ - ifstream.peek() 到达文件末尾时的返回值

c++ - 可能正在学习旧的 C++ 标准

c - float 结果不正确

c - 这是 C 中的未定义行为吗? (c=x) + (c==y)

c++ - 常量值运行时评估

c++ - C++初始化中的 "several values"是什么?

c++ - 对象初始化: Init method or stream operator?

c++ - 以下代码是否调用 UB?

c++ - 在同一行上使用变量时的预递增运算符