• C++ 右值引用


    左值和右值

    左值:当一个对象被用作左值的时候,用的是对象的身份(在内存中的位置)。

    右值:当一个对象被用作右值的时候,用的是对象的值(内容)。

    右值引用

    重要性质:右值引用只能绑定到一个将要销毁的对象。因此,我们可以自由的将一个右值引用的资源移动到另一个对象中。

    右值引用的好处

    为了支持移动操作,引入右值引用。

    右值引用只能绑定到一个将要销毁的对象。因此我们可以自由的将一个右值引用的资源移动到另一个对象中。

    引入右值引用的主要目的是提高程序运行的效率。有些对象在复制时需要进行深复制,深复制往往非常耗时。合理使用右值引用可以避免没有必要的深复制操作。

    标准库move函数

    move函数定义在头文件utility中,通过调用move函数可以获得绑定到左值上的右值引用。

    int &&rr3 = std::move(rr1);
    

    move调用告诉编译器:我们有一个右值,但我们希望像一个右值一样处理它。意味着,除了对rr1赋值或销毁它外,我们将不再使用它的值。

    注意:使用move应该使用std::move而不是move。这样可以避免潜在的名字冲突。

    移动构造函数

    类似拷贝构造函数,移动构造函数的第一个参数是该类类型的一个引用。不同于拷贝构造函数的是,这个引用参数在移动构造函数中是一个右值引用。与拷贝构造函数一样,任何额外的参数都必须有默认实参。

    与拷贝构造函数不同,移动构造函数不分配任何新内存;它接管给定的对象中的内存。在接管内存之后,它将给定对象中的指针都置为nullptr。这样就完成了从给定对象的移动操作,此对象将继续存在。

    移动赋值运算符

  • 相关阅读:
    题解 P3960 【列队】
    题解 P3825 【[NOI2017]游戏】
    题解 P3385 【【模板】负环】
    luoguP1555 尴尬的数字(暴力+map)
    luogu P1775 古代人的难题_NOI导刊2010提高(02)(斐波纳契+数学)
    luogu P1405 苦恼的小明(欧拉定理)
    luogu P2117 小Z的矩阵(结论题)
    BZOJ2870 最长道路tree(并查集+LCA)
    BZOJ 4668 冷战(按秩合并并查集+LCA)
    BZOJ 3376 [Usaco2004 Open]Cube Stacking 方块游戏(带权并查集)
  • 原文地址:https://www.cnblogs.com/xiaobaizzz/p/12356541.html
Copyright © 2020-2023  润新知