相关疑难解决方法(0)

包含对自身的引用的类

浏览标准草案(n3242)我在第9.2条(强调我的)中找到了这句话:

非静态(9.4)数据成员不应具有不完整类型.特别是,类C不应包含类C的非静态成员,但它可以包含指向C类对象的指针或引用.

从这里我认为可以定义这样的类:

class A {
public:
  A(A& a) : a_(a){
  }
private:
  A& a_;
};
Run Code Online (Sandbox Code Playgroud)

然后在第8.3.2节中我发现了以下内容:

应初始化引用以引用有效的对象或函数

问题1:是否允许定义此类型的对象,并将其名称作为参考:

A a(a);
Run Code Online (Sandbox Code Playgroud)

或者这会触发未定义的行为?

问题2:如果是,标准的哪些部分允许从仍待构建的对象初始化引用?

问题3:如果不是,这是否意味着A类的定义形式良好但是没有触发UB就不能创建第一个对象?在这种情况下,这背后的理由是什么?

c++ language-lawyer

26
推荐指数
2
解决办法
1656
查看次数


标签 统计

c++ ×2

language-lawyer ×1