给出Widget && var1 = someWidget; auto && var2 = var1; `,为什么auto && var2不代表右值引用?

问题描述 投票:0回答:1

为什么auto&& var2在下面的代码中不等于右值引用?

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

Widget&& var1 = someWidget;      // here, “&&” means rvalue reference
auto&& var2 = var1;              // here, “&&” does not mean rvalue reference
c++ c++11 auto rvalue-reference c++20
1个回答
0
投票

为什么auto&& var2不代表右值参考?

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

auto中的auto&& var2 = var1;推导为Widget&,因为var1是左值。然后,由于Widget& &&Widget&产生reference collapsing。也就是说,该语句:

auto&& var2 = var1;

类型推导后变成:

Widget& var2 = var1;

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

© www.soinside.com 2019 - 2024. All rights reserved.