考虑这个玩具示例:
struct A { int x; };
int main() {
A&& a=A();
return 0;
}
是否存在隐式强制转换来自的临时值(内置类型和临时对象的值)到类型为rvalue reference
的对象?
a
是否有地址?
答案 0 :(得分:2)
- 是否存在隐式强制转换来自的临时值(内置类型和临时对象的值)到类型为
醇>rvalue reference
的对象?
首先,一个挑剔,强制转换是根据定义的显式转换,因此不能有隐式转换。除此之外,引用显然不是对象类型。它甚至可能不需要任何存储空间。引用绑定到对象。将它们视为对象的替代名称更合适。特别是Rvalue引用只能绑定到特定类型的对象。这几乎都是“无名”和“临时”的价值观。我们也可以转换为右值引用来强制将对象指定为“即将到期”。
这里有一个错综复杂的观点,一旦右值参考物绑定到一个物体,它就不再是“无名”。特别是,这意味着通过使用该引用,我们“按名称”调用对象,从而获得左值。此外,与此同时,将块范围中的引用绑定到临时,将临时的生命周期延长到范围结束。这将我们带到下一点。
- 醇>
a
是否有地址?
是和否。如前所述,参考本身可能需要也可能不需要存储。但这没有实际意义,因为它只是一个对象的名称。获取引用的地址将产生绑定到它的对象的地址。在这种情况下,它将是临时绑定的地址。