为什么auto&& var2
在下面的代码中不等于右值引用?
我将很高兴为这个问题提供帮助。
Widget&& var1 = someWidget; // here, “&&” means rvalue reference
auto&& var2 = var1; // here, “&&” does not mean rvalue reference
为什么
auto&& var2
不代表右值参考?
var2
是通用引用,因为涉及类型推导。因此,var2
将根据其初始化方式成为左值引用或右值引用(var2
始终是引用)。
auto
中的auto&& var2 = var1;
推导为Widget&
,因为var1
是左值。然后,由于Widget& &&
,Widget&
产生reference collapsing。也就是说,该语句:
auto&& var2 = var1;
类型推导后变成:
Widget& var2 = var1;
所以var2
实际上是一个左值引用。