在C ++ 11之前,由于rvalue引用不存在而且非const lvalue引用无法绑定到rvalues,因此只有const lvalue引用可以绑定到rvalues。原因,afaik,为什么非常量左值引用无法绑定到右值是因为它会很危险。那么他们制作了rvalue引用,这使得移动数据成为可能......但为什么rvalue引用绑定到rvalues被认为比绑定到rvalues的非const lvalue引用更安全?
答案 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
}
};
即使左值引用被允许引用右值,也无法在第一个版本中获得第二个版本的性能优势。