右值引用绑定到左值
An rvalue reference binds to an lvalue
让我们考虑以下代码:
int x = 0;
using U = int&;
U&& r = x;
我认为,根据定义,对 Type 的右值引用仅绑定到 Type 的右值表达式(无论什么类型等于)。
我看了一些关于SO的问题,但没弄明白那段代码的意思(虽然,我知道和完美转发有联系)。我提供的代码片段是否被定义为有效代码只是为了使完美转发成为可能?
我知道引用折叠规则,但它们的效果(将右值引用绑定到左值表达式的可能性)似乎与右值引用的定义相矛盾。
我不同意这是一个重复的问题 - 我问的是具体的代码片段。
在这种情况下,reference collapsing 开始,U&&
完全扩展为 int& &&
,折叠为 int&
,这意味着您最终得到左值引用。你是正确的,右值引用不能绑定到左值。
让我们考虑以下代码:
int x = 0;
using U = int&;
U&& r = x;
我认为,根据定义,对 Type 的右值引用仅绑定到 Type 的右值表达式(无论什么类型等于)。
我看了一些关于SO的问题,但没弄明白那段代码的意思(虽然,我知道和完美转发有联系)。我提供的代码片段是否被定义为有效代码只是为了使完美转发成为可能?
我知道引用折叠规则,但它们的效果(将右值引用绑定到左值表达式的可能性)似乎与右值引用的定义相矛盾。
我不同意这是一个重复的问题 - 我问的是具体的代码片段。
在这种情况下,reference collapsing 开始,U&&
完全扩展为 int& &&
,折叠为 int&
,这意味着您最终得到左值引用。你是正确的,右值引用不能绑定到左值。