【问题标题】:Why does && sometimes bind lvalues and other times not?为什么 && 有时会绑定左值而其他时候不会?
【发布时间】:2016-10-19 21:48:40
【问题描述】:

好的,我有这个代码:

struct Mine{
    template<typename T>
    Mine(T&& x){
    }
};
void nFoo(int&& x){
}
void sFoo(Mine x){
}

nFoo 直接采用int&amp;&amp;,而sFoo 做了一些调整以获得相同的效果。

考虑这段代码:

nFoo(12); //Works

int x = 0;
nFoo(x);  //Cannot bind int (lvalue) to int&&

sFoo(12); //Works
sFoo(x);  //Works

为什么int&amp;&amp; 有时允许来自lvalues 的绑定,有时不允许?

【问题讨论】:

标签: c++ rvalue-reference lvalue rvalue


【解决方案1】:

为什么 int&& 有时允许从左值绑定有时不允许?

int&amp;&amp; 不绑定到左值,因为它是一个右值引用

T&amp;&amp;,在T 是模板参数的上下文中,确实绑定到左值,因为它是forwarding reference。它不是右值引用,尽管语法几乎相同。

【讨论】:

  • 是否有任何资源可以建议您逐个学习左值、右值、转发参考等?
  • @snr 我想现代 C++ 教科书以结构化的方式解释了这一切。我拥有的唯一一本 C++ 书是在 c++11 之前编写的,所以我不知道有什么可以推荐的。我现在在答案中链接的文档应该很好地描述了转发引用及其与其他引用的关系。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2023-04-10
  • 2013-12-25
  • 2012-08-09
  • 1970-01-01
  • 1970-01-01
  • 2020-01-10
  • 2023-04-09
相关资源
最近更新 更多