左值引用和右值引用的区别

3 分钟阅读 469 字 + 327 词
左值是 能够取地址 的值,而右值是 不能够取地址 的值。
左值引用使用单个&符号,用来绑定具有 持久存储期 的变量或者对象
右值引用使用两个&&符号,绑定到右值表达式上,通常是 临时对象或者即将销毁的对象
右值引用的主要目的是 通过移动语义来利用这些临时资源 避免不必要的拷贝 。通常是 与std::move进行搭配使用
参考答案
在C++中,左值和右值是两种不同类型的表达式,它们分别对应着不同的引用方式:
  1. 左值引用:
    • 左值引用使用 & 符号
    • 左值引用绑定到左值表达式上,即那些具有持久存储期的表达式,如变量或者对象。
    • 它们在内存中有一个持久的地址,可以被赋值和修改。
  2. 右值引用:
    • 右值引用使用两个 & 符号
    • 右值引用绑定到右值表达式上,通常是临时对象或即将销毁的对象,它们没有持久的存储期。
    • 右值引用的主要目的是通过移动语义来利用这些临时资源,避免不必要的复制。
  3. 区别总结
    • 绑定对象:左值引用绑定到具有持久状态的对象,而右值引用绑定到临时或即将销毁的对象。
    • 生命周期:左值引用延长了它所引用对象的生命周期,右值引用则表示对一个临时值的引用。
    • 可修改性:左值引用可以被用来修改其所引用的对象,而右值引用通常用于移动语义,不涉及修改。
    • 标准库支持:C++11 标准库中的某些函数和算法(如 std::move )特别设计来与右值引用配合使用。