[C++学习笔记] 2. 左值、右值

2. 左右值

2.1 概念

左值指既能够出现在等号左边,也能出现在等号右边的变量;右值则是只能出现在等号右边的变量。

int a; // a为左值
a = 3; // 3为右值
  • 左值是可寻址(有地址)的变量,具有永久性,数据绑定
  • 右值一般是不可寻址的常量,或在表达式求值过程中创建的无名临时变量,短暂性,让临时变量不消失,直接将目标指向临时变量,避免无意义的复制,减缓内存开销

左值用于写操作,可以存储数据;
右值用于读操作,读到的数据放在一个看不见的临时变量

区别:左值可以被修改,而右值不能。

2.2 左值引用和右值引用

  • 左值引用:引用一个对象;

  • 右值引用:C++中右值引用可以实现“移动语义”,通过&&获得右值引用

    int x = 6; // x是左值,6是右值
    int &y = x; // 左值引用,y引用x
    
    int &z1 = x * 6; // 错误,x*6是一个右值
    const int &z2 =  x * 6; // 正确,可以将一个const引用绑定到一个右值
    
    int &&z3 = x * 6; // 正确,右值引用
    int &&z4 = x; // 错误,x是一个左值
    

2.3 左右值引用示例

引用的注意事项:①引用必须初始化;②引用初始化后不可以改变

int main() {
    
	int a = 10;
	int b = 20;
	//int &c; //错误,引用必须初始化
	int &c = a; //一旦初始化后,就不可以更改
	c = b; //这是赋值操作,不是更改引用

	cout << "a = " << a << endl;
	cout << "b = " << b << endl;
	cout << "c = " << c << endl;

	return 0;
}

上述代码中

int &c = a;就是左值引用(赋地址操作),c的地址绑定了a,c和a会一起一起改变

c = b;是右值引用(赋值操作),c得到了b地址中存储的值,同时a也跟着改变

因此输出为

a = 20
b = 20
c = 20

你可能感兴趣的:(CPP,c++)