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

Why is rvalue references considered safer than lvalue references?

本文关键字:引用 安全 被认为 为什么      更新时间:2023-10-16

在C++11之前,只有常量左值引用可以绑定到右值,因为右值引用不存在,非常量左值引用无法绑定到右值。afaik,非常量左值引用不能绑定到右值的原因是这将是危险的。因此,他们进行了右值引用,这使得移动数据成为可能......但是,为什么绑定到右值的右值引用被认为比绑定到右值的非常量右值引用更安全?

右值引用相对于左值引用的优点是,使用右值引用,您知道引用的对象是右值。因此,您知道您可以在不损坏其他数据的情况下对其进行操作。

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

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
}
};

在第二个版本中可以获得的性能优势无法在第一个版本中实现,即使允许左值引用引用右值也是如此。