【发布时间】:2016-10-05 01:19:01
【问题描述】:
由于引用本身不是一个对象,因此不能获取地址(与分配给它们的适当对象的指针不同),那么在 C++ 中如何或在何处存储或跟踪引用?
【问题讨论】:
-
未指定引用的存储。
-
引用不需要“存储”,就像变量名不需要“存储”一样。
由于引用本身不是一个对象,因此不能获取地址(与分配给它们的适当对象的指针不同),那么在 C++ 中如何或在何处存储或跟踪引用?
【问题讨论】:
来自 [dcl.ref]/4:
未指定引用是否需要存储 (3.7)。
但请注意,存储持续时间适用于引用,也适用于对象:来自 [basic.stc]/3:
存储持续时间类别也适用于引用。
也就是说,变量的正式生命周期约束平等地适用于所有变量,无论它们是对象还是引用,并且引用可以超出范围并且它的生命周期结束,就像其他变量一样。
但是,不能有“动态引用”,因此动态存储持续时间不适用。其次,存储期也适用于表达式的值,当然,表达式的值绝不是引用(而始终是对象)。
最后,一个非静态引用数据成员被存储为包含它的对象的一部分。因此,您完全可以拥有struct T { int & r; }; 并拥有T 类型的临时实例和动态分配实例。 (另请注意,您不能将offsetof 应用于T,因为T 不是标准布局。)
【讨论】: