gpt4 book ai didi

c++ - 持有对自身的引用的类

转载 作者:IT老高 更新时间:2023-10-28 12:54:39 24 4
gpt4 key购买 nike

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

Non-static (9.4) data members shall not have incomplete types. In particular, a class C shall not contain a non-static member of class C, but it can contain a pointer or reference to an object of class C.

据此,我认为定义这样的类是可以的:

class A {
public:
A(A& a) : a_(a){
}
private:
A& a_;
};

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

A reference shall be initialized to refer to a valid object or function

问题 1: 是否允许定义这种类型的对象并将其名称作为引用传递:

A a(a);

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

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

问题3:如果不是,这是否意味着A类的定义格式正确但不触发UB就不能创建first对象?在这种情况下,这背后的理由是什么?

最佳答案

“有效对象”在标准中的任何地方都没有定义,但它旨在表示具有适当大小和对齐方式的内存区域,可以包含指定类型的对象。它只是意味着排除对取消引用的空指针、未对齐的内存区域等事物的引用。未初始化的对象是有效的。

有一个 Unresolved 问题来澄清措辞,CWG 453 .

关于c++ - 持有对自身的引用的类,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/22098834/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com