小编sim*_*mon的帖子

这个C++成员初始化行为是否定义良好?

假设我们有一个类B,有一个member是默认初始化42.这个类知道如何打印它的值member.(它在c'tor中这样做):

struct B
{
  B() : member(42) { printMember(); }

  void printMember() const { std::cout << "value: " << member << std::endl; }

  int member;
};
Run Code Online (Sandbox Code Playgroud)

然后我们添加一个A接收a的const引用的类,B并要求B打印它的值:

struct A
{
  A(const B& b) { b.printMember(); }
};
Run Code Online (Sandbox Code Playgroud)

最后,我们添加另一个Aggregate聚合a A和a的类B.棘手的部分是a类型的对象A在对象b类型之前声明B,但是然后a使用(尚未生效的?)引用初始化b:

struct Aggregate
{
  A a;
  B b;

  Aggregate() : a(b) …
Run Code Online (Sandbox Code Playgroud)

c++ constructor initialization default-constructor undefined-behavior

21
推荐指数
1
解决办法
1680
查看次数