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