左值和右值的区别:仅仅是因为赋值运算符=的两个运算对象,左侧的值和右侧的值。
真实的情况不是这样的,下面展开深入介绍下:
- 左值和右值描述
当对象被用作左值的时候,用的是对象的身份(在内存中的位置);
当一个对象被用作右值的时候,用的是对象的值(内容)
- 如何区分和判断:
左值是表达式的持久对象,它有明确的存储位置,
而右值是临时的,通常不具有可识别的存储位置,主要用于立即操作或赋值。
区分左值和右值,终究还是要看能否取地址
- CPU 眼里的引用和指针
引用是一种更加安全的指针,引用是必须初始化的,而指针可以不初始化,
但是指针有可能是一个野指针,也有可能是一个null指针。
从汇编的角度来看,引用和指针做的事情是样的。
扩展思考:
什么是引用?是给一块内存空间【有名字,或没有】起一个别名。
什么是左值引用?给一个本来就有名字的内存空间另外起一个名字。
什么是右值引用?给一个本来没有名字的内存空间起一个名字。以至于能够利用这块空间。
- 示例:
左值引用:
int X = 0;
int &Ref1 = X;
右值引用:
使用&&运算符声明。为右值引用初始化的一定是右值,不可以使用左值代替如下:
int X = 0;
int &&Ref2 = X + 3;
本文暂时没有评论,来添加一个吧(●'◡'●)