是否存在从临时值到rvalue引用类型的对象的隐式转换?

时间:2017-12-25 16:12:01

标签: c++

考虑这个玩具示例:

struct A { int x; };
int main() {
    A&& a=A(); 
    return 0;
}
  1. 是否存在隐式强制转换来自的临时值(内置类型和临时对象的值)类型为rvalue reference的对象?

  2. a是否有地址?

1 个答案:

答案 0 :(得分:2)

  
      
  1. 是否存在隐式强制转换来自的临时值(内置类型和临时对象的值)类型为rvalue reference的对象?
  2.   

首先,一个挑剔,强制转换是根据定义的显式转换,因此不能有隐式转换。除此之外,引用显然不是对象类型。它甚至可能不需要任何存储空间。引用绑定到对象。将它们视为对象的替代名称更合适。特别是Rvalue引用只能绑定到特定类型的对象。这几乎都是“无名”和“临时”的价值观。我们也可以转换为右值引用来强制将对象指定为“即将到期”。

这里有一个错综复杂的观点,一旦右值参考物绑定到一个物体,它就不再是“无名”。特别是,这意味着通过使用该引用,我们“按名称”调用对象,从而获得左值。此外,与此同时,将块范围中的引用绑定到临时,将临时的生命周期延长到范围结束。这将我们带到下一点。

  
      
  1. a是否有地址?
  2.   

是和否。如前所述,参考本身可能需要也可能不需要存储。但这没有实际意义,因为它只是一个对象的名称。获取引用的地址将产生绑定到它的对象的地址。在这种情况下,它将是临时绑定的地址。