1

下一个 c++ 标准中即将出现的 R-Value 参考是什么?

4

4 回答 4

3

它允许您区分调用您传递对 r-value 或 l-value 的引用的代码。例如:

void foo(int &x);

foo(1); // we are calling here with the r-value 1. This would be a compilation error

int x=1;
foo(x); // we are calling here with the l-value x. This is ok

通过使用 r 值引用,我们可以允许传入对临时对象的引用,例如上面的第一个示例:

void foo(int &&x); // x is an r-value reference

foo(1); // will call the r-value version

int x=1;
foo(x); // will call the l-value version

当我们想要将创建对象的函数的返回值传递给使用该对象的另一个函数时,这会更有趣。

std::vector create_vector(); // creates and returns a new vector

void consume_vector(std::vector &&vec); // consumes the vector

consume_vector(create_vector()); // only the "move constructor" needs to be invoked, if one is defined

移动构造函数的作用类似于复制构造函数,但它被定义为采用右值引用而不是左值 (const) 引用。允许使用 r-value 语义将数据移出临时创建的 increate_vector并将它们推送到参数中,consume_vector而无需对向量中的所有数据进行昂贵的复制。

于 2009-05-11T05:40:53.387 回答
3

看看为什么 C++0x 右值引用不是默认值?,这很好地解释了它们的实际用途。

于 2009-05-11T05:43:45.863 回答
1

这是Stephan T. Lavavej的一篇很长的文章

于 2009-05-11T08:19:33.863 回答
0

http://en.wikipedia.org/wiki/C++0x#Rvalue_reference_and_move_semantics

于 2009-05-11T05:33:41.263 回答