1、什么是左值:可以被引用取地址的值。
const int a = 12; // a为左值
const int& pt = a; // pt为左值引用
double x1 = 1.2; // x1为左值
double& x2 = x1; // x2为左值引用
c风格字符串为左值。
详细介绍:C++ Primer Plus 8.2.3
2、什么是右值:可以出现在赋值表达式右边,但不能对其应用地址运算符的值。
int a = 10;
int b = 12;
int && x1 = 13; // 13为右值
int && x2 = a+b; //a+b为右值
double && x3 = std::sqrt(2.0) //std::sqrt(2.0)函数返回值为右值
double * ptr = &x1; // 通过右值引用获得13存储的地址
引入右值引用的目的之一:实现移动语义。
详细介绍:C++ Primer Plus 18.1.9
3、移动语义
不删除原对象,将其数据保留在原来位置,将现有对象与该位置关联。类似计算机中移动文件(只是移动了索引路径)。
4、移动构造函数与移动赋值运算符
例子:
//.h
Class Useless{
public:
Useless(Useless&& f); // 移动构造函数,非const,参数为右值
Useless& operator= (Useless&& f); // 移动赋值运算符
}
//.cpp
Useless four(one+two); // one+two为右值
Useless four=one+two; // one+two为右值
详细介绍:C++ Primer Plus 18.2.1
总结:
1、使用右值引用实现的移动语义有助于减少构造、析构临时返回对象造成的时间空间浪费。
2、对大部分程序员,引入右值引用不是为了编写使用其的代码,而是调用使用其编写好的库代码。
3、详细学习资料见C++ Primer Plus 18.2
来源:CSDN
作者:夜空紫色
链接:https://blog.csdn.net/qq_33726635/article/details/104782331