为什么rvalue引用被认为比左值引用更安全?

时间:2017-07-07 18:46:26

标签: c++

在C ++ 11之前,由于rvalue引用不存在而且非const lvalue引用无法绑定到rvalues,因此只有const lvalue引用可以绑定到rvalues。原因,afaik,为什么非常量左值引用无法绑定到右值是因为它会很危险。那么他们制作了rvalue引用,这使得移动数据成为可能......但为什么rvalue引用绑定到rvalues被认为比绑定到rvalues的非const lvalue引用更安全?

1 个答案:

答案 0 :(得分:1)

rvalue引用优于左值引用的优点在于,使用rvalue引用,知道所引用的对象是rvalue。因此,您知道可以在不损坏其他数据的情况下操纵它。

如果允许非常量左值引用引用右值,则永远不会知道引用的对象是否是临时的。考虑一下,例如这两个构造函数

class A {
public:
    A(A& src) // Copy constructor
    {
       // Create a copy of src, but be sure to leave src intact
    }

    A(A&& src) // Move constructor
    {
        // Create a copy of src. If necessary, you can steal some
        // of src's resources (dynamic memory, open files). It
        // won't miss it
    }
};

即使左值引用被允许引用右值,也无法在第一个版本中获得第二个版本的性能优势。