您的位置:首页 > 编程语言 > C语言/C++

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

2016-05-29 21:36 267 查看
关键点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的值啦?好像可以吧;
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签:  c++