使用右值参考成员?

Joh*_*itb 39 c++ rvalue-reference c++11

我想知道一个右值引用成员有什么用

class A {
  // ...
  // Is this one useful?
  Foo &&f;
};
Run Code Online (Sandbox Code Playgroud)

与左值参考成员相比,它有任何好处或缺点吗?什么是它的主要用途?

How*_*ant 24

我已经看到了rvalue引用数据成员的一个非常激励的用例,它在C++ 0x草案中:

template<class... Types>
tuple<Types&&...>
forward_as_tuple(Types&&... t) noexcept;
Run Code Online (Sandbox Code Playgroud)

效果:构造一个对t中参数的引用元组,适合作为参数转发给函数.因为结果可能包含对临时变量的引用,所以程序应确保此函数的返回值不会超过其任何参数.(例如,程序通常不应将结果存储在命名变量中).

返回: tuple<Types&&...>(std::forward<Types>(t)...)

当rvalues用作forward_as_tuple的参数时,元组具有rvalue引用数据成员,否则具有左值引用数据成员.

我发现forward_as_tuple随后在需要捕获可变参数时很有用,完美地将它们打包为元组,然后在转发到仿函数时重新展开它们.在实现LWG 1385中提出的增强版tuple_cat时,我使用了这种风格的forward_as_tuple:

http://www.open-std.org/jtc1/sc22/wg21/docs/lwg-active.html#1385


fre*_*low 13

根据Stephan T. Lavavej的说法,rvalue参考数据成员没有用.

我看到程序员在掌握右值引用时所做的事情是,他们开始变得有点疯狂,因为它们非常强大.他们开始说"哦,我将有rvalue参考数据成员,我将有rvalue引用局部变量,我将有rvalue引用返回值!" 然后他们写这样的代码:[...]

  • 在我们研究如何正确使用右值引用之前大约需要10年时间. (17认同)
  • @James:我当然希望如此.永远只能坚持五种不同的价值类别会有点无聊,不是吗? (3认同)
  • 对于谁可能想知道,他在视频中 31:00 说。 (3认同)
  • @ 7vies:程序员对rvalue引用感到困惑的主要原因是因为他们已经对rvalues感到困惑. (2认同)