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

本文介绍了C++中的左值和右值的概念,左值可以被修改,而右值则不能。左值引用用于引用一个对象,而右值引用能实现“移动语义”。通过示例解释了左值引用和右值引用的使用,强调了引用必须初始化且初始化后不可改变。
摘要由CSDN通过智能技术生成

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

  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值