为什么auto && var2不隐含右值引用? [重复]

问题描述 投票:1回答:1
为什么auto&& var2在下面的代码中不等于右值引用?

我将很高兴为这个问题提供帮助。

Widget&& var1 = someWidget; // here, “&&” means rvalue reference auto&& var2 = var1; // here, “&&” does not mean rvalue reference

鉴于Widget&& var1

rvalue引用,为什么它不是rvalue

为什么auto&& var2 = var1;不是指右值参考?
c++ c++11 auto rvalue-reference
1个回答
1
投票
为什么auto&& var2不代表右值参考?

var2

通用引用,因为涉及类型推导。因此,var2将根据其初始化方式成为左值引用或右值引用(var2始终是引用)。

auto中的auto&& var2 = var1;推导为Widget&,因为var1是一个左值(即var1是一个命名对象,而您尚未对其应用std::move())。然后,由于Widget& &&Widget&产生reference collapsing。总而言之,该语句:

auto&& var2 = var1;

类型推导后变成:

Widget& var2 = var1;

所以var2实际上是一个左值引用。


如果希望var2作为右值引用,则可以将std::move()应用于初始化对象:

auto&& var2 = std::move(var1);

扣除类型后,结果为:

Widget&& var2 = var1;

var2在这种情况下是右值引用。
© www.soinside.com 2019 - 2024. All rights reserved.