我最近读过,参考变量可能会或可能不会占用任何存储即使它们是类的非静态成员变量:
当创建某个类C的对象时,非引用类型的每个非静态数据成员都分配在C的对象表示的某些部分中。引用成员是否占用任何存储是实现定义的< / strong>,但它们的存储持续时间与它们所属的对象的存储持续时间相同。 对于非联合类类型,始终会分配具有相同成员访问权限的成员,以便稍后声明的成员在类对象中具有更高的地址。具有不同访问控制的成员以未指定的顺序分配(编译器可以将它们组合在一起)。对齐要求可能需要在成员之间或在课程的最后一个成员之后填充。
(来自http://en.cppreference.com/w/cpp/language/data_members#Layout,强调我的)
问题:
我对上述引言的理解是否正确?
如果正确的话,在实际存储中可以省略引用类型的非静态成员变量,至少在理论上是这样吗?我现在可以想象的一个例子是struct A { int x = 0; int& rx = x; };
,但我不确定是不是这样。
这是否真的发生了?例如,sizeof(A)
被报告为好像A
的非静态参考数据成员不存在。