C++11 右值引用简化代码的例子

原创 2015年11月20日 18:52:47

C++11中引入了右值引用的概念
这里不再解释什么是右值引用,用一个例子说明右值引用对代码带的一些简化效果
下面是将一个方法分为两个版本,第一个方法中newNode使用右值引用参数newNode,第二个则是左值引用的

    /* 右值引用版本 */
    HashNode& insertNode(HashNode&& newNode) {
    //do something
    }
    /* 左值引用版本 */
    HashNode& insertNode(HashNode& newNode) {
        return insertNode(std::move(newNode));//将newNode转为右值引用参数,调用右值引用版本的函数
    }

以下是正常的左值引用调用

HashNode node{1,2};
insertNode(node);//调用左值引用版本的参数; 

如果node只是个临时临时对象,并不需要保存给后面的代码使用,在没有右值引用版本的情况下,只能按上面的方式调用
因为我们定义了右值引用版本的insertNode函数,所以就可以如下调用。不用再定义一个临时对象node

insertNode(HashNode {1,2});//如果没有右值引用版本,编译会报错。

更进一步,还可以这样简写,连类名都省略了:

insertNode({1,2});//如果没有右值引用版本,编译会报错。

如果觉得分别写两个引用版本的函数太麻烦,可以删除最前面代码中左值引用版本的函数,只保留右值引用的版本。

那么,在用左值引用调用时要用std::move转为右值引用,例子如下:

HashNode node{1,2};
insertNode(std::move(node));//std::move将 node转为右值引用
版权声明:本文为博主原创文章,转载请注明源地址。

相关文章推荐

C++11右值引用自写测试例子

#include #include #include /* *C++ 11增加一个新的引用(reference)类型称作右值引用(R-value reference), *标记为typename &&...

C++11特性--右值引用,移动语义,强制移动move()

1.右值引用   *右值:不能对其应用地址运算符的值。   *将右值关联到右值引用导致该右值被存储到特定的位置,且可以获取该位置的地址   *右值包括字面常量(C风格字符串除外,它表示地址),诸...

右值引用C++11

C++ 11中引入的一个非常重要的概念就是右值引用。理解右值引用是学习“移动语义”(move semantics)的基础。而要理解右值引用,就必须先区分左值与右值。        对左值和右值的一个...
  • SAYA_
  • SAYA_
  • 2015-10-22 11:42
  • 362

C++11新特性 右值引用

在C++中,左值(lvalue)是可以获取其地址的一个量。由于经常出现在赋值语句的左边,因此称之为左值。例如一个有名称的变量。 例如: int a=10;//a就是一个左值。      传...

C++11新特性之 rvalue Reference(右值引用)

右值引用可以使我们区分表达式的左值和右值。C++11引入了右值引用的概念,使得我们把引用与右值进行绑定。使用两个“取地址符号”:int&& rvalue_ref = 99;需要注意的是,只有左值可以付...

C++11新特性(1) 右值引用

在C++中,左值(lvalue)是可以获取其地址的一个量。由于经常出现在赋值语句的左边,因此称之为左值。例如一个有名称的变量。 例如: int a=10; //a就是一个左值。      传统的...

C++11 标准新特性: 右值引用与转移语义

文章出处:https://www.ibm.com/developerworks/cn/aix/library/1307_lisl_c11/ 新特性的目的 右值引用 (Rva...

C++11新特性:移动语义和右值引用

右值引用传统的C++引用(左值引用)使得标识符关联到左值。左值是一个表示数据的表达式(如变量名或解除引用的指针),程序可以获得其地址。 C++11新增了右值引用。右值引用,顾名思义,可以关联到右值,...

C++11 标准新特性: 右值引用与转移语义

http://www.ibm.com/developerworks/cn/aix/library/1307_lisl_c11/ C++ 的新标准 C++11 已经发布一段时间了。本文介绍了新...

C++11 右值引用

右值引用 (Rvalue Referene) 是 C++ 新标准 (C++11, 11 代表 2011 年 ) 中引入的新特性 , 它实现了转移语义 (Move Sementics) 和精确传递 ...
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:深度学习:神经网络中的前向传播和反向传播算法推导
举报原因:
原因补充:

(最多只允许输入30个字)