(学习笔记)从引用参数谈到左右值

来源:互联网 发布:windows更新消失 编辑:程序博客网 时间:2024/06/08 06:15

关键点1:
非常量引用的初始值必须为左值
什么是左值? 能放在等号左边的值?
关键点2:
左值是可以对其取地址的值!这是一个区分左值和右值的便捷方法。
这意味着,左值是一个存储在内存中的某个存储单元的数据,该数据的值是可以被改变的!
这也就是为什么“非常量的”引用值必须是左值的原因了!!!

看下面的题目:
有下面一个类声明:

class A{    public:        int a ;    A(int _a){ a = _a;}    int f1(A& aa);    int f2(const A& aa);    int f3( const A aa);    int f4(A aa);}

那么:
f1(0); //错误,报错,为啥?看看开头的第一句!!
f2(0); //正确
f3(0); //正确
f4(0); //正确

三个正确的函数调用其实都会经历一个强制类型转换吧?我是这么理解的。求大神解释!


那么,什么是右值呢?
右值是Read-value: 只读的值!!!
const int a = 0;
int b = 0;
b+2 = a; //错,(b+2)就是一个右值
a = b+2; //错,a是左值,但是只读的

可能,会问为什么a是只读的,但是不是右值,
int * a_address = &a;
*a_address = 1;
是不是就改变的a的值啦?好像可以吧;

0 0