【问题标题】:An rvalue reference binds to an lvalue [duplicate]右值引用绑定到左值
【发布时间】:2019-07-07 19:21:11
【问题描述】:

让我们考虑以下代码:

int x = 0;
using U = int&;
U&& r = x;

我认为,根据定义,对 Type 的右值引用仅绑定到 Type 的右值表达式(无论等于什么类型)。

我已经阅读了一些关于 SO 的问题,但无法弄清楚该代码的含义(不过,我知道与完美转发有关)。我提出的代码片段是否被定义为有效代码只是为了使完美转发成为可能?

而且我知道引用折叠规则,但它们的效果(将右值引用绑定到左值表达式的可能性)似乎与右值引用的定义相矛盾。

我不同意这是一个重复的问题 - 我问的是具体的代码片段。

【问题讨论】:

  • 很确定引用折叠开始了,你最终得到了左值引用。
  • 是的。 U&& 实际上折叠成 int&。您不能将左值绑定到右值引用:en.cppreference.com/w/cpp/language/…
  • U&& r 定义了一个左值引用,而不是一个右值引用

标签: c++ c++11 rvalue-reference


【解决方案1】:

在这种情况下,reference collapsing 启动,U&& 完全扩展为 int& &&,折叠为 int&,这意味着您最终得到了左值引用。右值引用不能绑定到左值是正确的。

【讨论】:

    猜你喜欢
    • 2014-01-02
    • 1970-01-01
    • 2017-12-06
    • 2014-10-31
    • 2017-04-13
    • 2011-02-14
    • 2018-09-30
    • 1970-01-01
    相关资源
    最近更新 更多