C++中引用是编译器通过指针实现的,但这个实现在语言层面对程序员做了透明化处理 可以看出,对于引用,结构体还是按指针类型为其分配内存空间的。下图A的写法可以通过编译,骗过编译器,但是就像不能派生的抽象类一样无法使用
C++ 中的结构体和类都不能直接包含自身作为成员变量,无论是通过值方式还是引用方式。这是因为在编译期间,编译器需要确定结构体或类的大小,而包含自身作为成员变量会导致大小无限增大,从而无法确定对象的大小。
对于选项 Cstruct A{A& _a;};,它的定义是合法的。在 C++ 中,结构体可以包含引用类型的成员变量,只要满足以下两个条件:
引用类型的成员变量在创建对象时必须进行初始化,指向已经存在的对象。
引用类型的成员变量一旦被初始化,就不能再重新指向其他对象。
在选项 C 的定义中,结构体 A 包含一个引用类型的成员变量_a,并没有违反上述条件。但需要注意的是,使用该结构体创建对象时,需要确保_a成员变量指向一个有效的对象,否则会导致未定义的行为。