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

关键点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的值啦?好像可以吧;

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值