rvalue-reference相关内容

Do C ++ 11编译器在代码优化期间可以将局部变量转换为右值?

有时,将复杂或长表达式拆分成多个步骤是明智的(例如第二版不是更清楚,但它只是一个例子): return object1(object2(object3(x))); 可写为: object3 a(x); object2 b(a); object1 c(b); return c;假设所有3个类都实现了以值为参数的构造函数,那么第一个版本可能会更快一些,因 ..

为什么`std :: move`命名为`std :: move`?

C ++ 11 std :: move(x)函数根本不移动任何东西。它只是一个转换为r值。为什么这样做? c> std :: move(x) code>只是一个转换为右值 - 更具体地说,是 xvalue ,而不是 prvalue 。还有一个事实,有一个名为 move 的演员有时会让人困惑。 move 可追溯至 2002年的原移动提案。本文首先介绍右值引用,然后说明如何编写更有效的 std ..
发布时间:2016-10-13 10:51:15 C/C++开发

如何使模板右值引用参数ONLY绑定到右值引用?

我正在编写网络库,并大量使用move语义来处理文件描述符的所有权。我的一个类希望接收其他类型的文件描述符封装,并取得所有权,因此它是像 struct OwnershipReceiver { template void receive_ownership(T& t) { //获取t的文件描述符,清除t } } 它必须处理多个不相关的 ..
发布时间:2016-10-13 10:35:21 C/C++开发

关于如何识别Rvalue或Lvalue引用和if-it-has-a-name规则

我正在阅读Thomas Becker的关于右值引用及其使用的文章。在那里他定义了他所说的 if-it-has-a-name 规则: 声明为右值引用可以是lvalues或 rvalues。区分标准是:如果它有一个名称,那么它是 一个左值。否则,它是一个右值。 这听起来很合理。它还清楚地标识了右值引用的重要性。 我的问题是: 您同意这项规定吗?如果没有,您可以举一个违反此规 ..
发布时间:2016-10-13 09:50:50 C/C++开发

我可以通常/总是使用std :: forward而不是std :: move?

我一直在看Scott Meyers的在C ++和Beyond 2012会议上讨论通用引用,到目前为止,一切都有意义。然而,观众成员在大约50分钟时问一个问题,我也想知道。 Meyers说他不关心答案,因为它是非惯用的,会愚蠢他的心,但我仍然感兴趣。 代码如下: //重载的典型函数体: void doWork(const Widget& param)// copy { // o ..

是否有任何情况下,RValue参考(&&)的返回是有用的?

当函数应返回RValue参考时,是否有原因?一种技术或诀窍,或成语或模式? MyClass&& func(...); 我知道一般返回引用,但有时我们这样做,不是我们( T& T :: operator = (T)只是一个惯用的例子)。但是 T&& func(...)?有没有什么一般的地方,我们会从中获益? 解决方案 有一些情况下,当适当的时候,但它们相对较少。当 ..
发布时间:2016-10-11 22:10:21 C/C++开发