【第22期】观点:IT 行业加班,到底有没有价值?

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转为右值引用
版权声明:本文为博主原创文章,转载请注明源地址。 举报

相关文章推荐

使用eclipse编译含有C++11特性的代码

使用eclipse编译含有C++11特性的代码,总是出错。最后在stackoverflow找到了解决方法。 <span style="font-s

C++智能指针

C++智能指针内存管理是C++中的一个常见的错误和bug来源。在大部分情形中,这些bug来自动态分配内存和指针的使用:当多次释放动态分配的内存时,可能会导致内存损坏或者致命的运行时错误;当忘记释放动态...

程序员升职加薪指南!还缺一个“证”!

CSDN出品,立即查看!

C++11 thread::joinable(5)

原文地址:http://www.cplusplus.com/reference/thread/thread/joinable/ <div id="I_type" style="margin: 5px 0px 0px; font-family: verdana,...

C++11:利用模板简化重载右值引用参数的函数

C++11标准中引入了右值的概念,是个非常好的东东,使用得当可以大大减少对象间无谓的复制(关于右值,左值的概念请自行问度娘)。左值引用版本和右值引用版本的函数下面是matrix_cl类的两个重载的构造...
  • 10km
  • 10km
  • 2016-03-08 17:05
  • 680

c++11特性与cocos2d-x 3.0之std::bind与std::function

原文地址:<a href="http://www.cnblogs.com/slysky/p/382264
收藏助手
不良信息举报
您举报文章:深度学习:神经网络中的前向传播和反向传播算法推导
举报原因:
原因补充:

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