通过r值参考接收后通过引用传递

时间:2013-06-19 18:01:57

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

我有一个班级Foo

我想要一个函数TakeFoo,它接受​​一个Foo对象并在其上调用方法。这就是我的开始:

void TakeFoo (const Foo&);

但是,我还需要能够在其上调用非const方法。所以我把它改成了这个:

void TakeFoo (Foo&);

但是,当我尝试将临时文件传递给它时会引发警告。所以我创建了一个重载:

void TakeFoo (Foo&&);

但是,我想重用代码,因此TakeFoo(Foo&&)基本上是这样做的:

void TakeFoo (Foo&& FooBar)
{
    TakeFoo(FooBar);
}

为什么这也没有引起警告,因为我仍在对一个临时的非const引用?

1 个答案:

答案 0 :(得分:7)

  

为什么这也没有引起警告,因为我仍在对一个临时的非const引用?

它没有引起警告,因为FooBar是左值。

虽然绑定的对象是临时的,虽然FooBar类型是“Foo的rvalue-reference”,但值类别命名变量是 lvalue - 给出一个名称允许在程序中重复引用该东西的东西(这或多或少是lvalues用于建模的想法)。

由于左值引用可以绑定到标准C ++中的左值,因此您不会收到编译器的任何警告。