C++自学笔记006左值引用和右值引用

无论左值引用还是右值引用,都是给对象取别名。

左值引用

左值引用就是对左值的引用,给左值取别名。

int& ref_data1 = data1;
int*& ref_ptr_data1 = ptr_data1;
int& ref_data2 = *ptr_data2;
const int& ref_con_data1 = con_data1;

注意
1, 左值引用只能引用左值
2,const左值引用既可以引用左值,也可以引用右值

int data1 = 0;
int& ref_data1 = data1;
//int& ref_data1 = 8;  // 编译会报错
const int& con_ref_data1 = data1;
const int& con_ref_data2 = 8;  //不会报错
const double& con_ref_data3 = data1 + 120;

右值引用就是对右值的引用,给右值取别名。

int&& right_ref1 = 10;
double&& right_ref2 = x + y;
double&& right_ref3 = fmin(x, y);

注意
1,右值引用变量是左值
2,因为右值引用变量是左值,所以右值引用变量可以取地址可以赋值
3,const右值引用变量可以取地址但不可以赋值
4,右值引用可以引用被move的值

int&& right_ref_data1 = 10;
double&& right_ref_data2 = x + y;
const double&& con_right_ref_data3 = x + y;
int data4 = 10;
//int&& rrt = t;  // 会报错
int&& right_ref_data4 = std::move(data4);
01-04 23:15