(学习笔记)从引用参数谈到左右值
2016-05-29 21:36
267 查看
关键点1:
非常量引用的初始值必须为左值!
什么是左值? 能放在等号左边的值?
关键点2:
左值是可以对其取地址的值!这是一个区分左值和右值的便捷方法。
这意味着,左值是一个存储在内存中的某个存储单元的数据,该数据的值是可以被改变的!
这也就是为什么“非常量的”引用值必须是左值的原因了!!!
看下面的题目:
有下面一个类声明:
那么:
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的值啦?好像可以吧;
非常量引用的初始值必须为左值!
什么是左值? 能放在等号左边的值?
关键点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++实现JNI接口需要注意的事项
- 关于指针的一些事情
- c++ primer 第五版 笔记前言
- share_ptr的几个注意点
- Lua中调用C++函数示例
- Lua教程(一):在C++中嵌入Lua脚本
- Lua教程(二):C++和Lua相互传递数据示例
- C++联合体转换成C#结构的实现方法
- C++高级程序员成长之路
- C++编写简单的打靶游戏
- C++ 自定义控件的移植问题
- C++变位词问题分析
- C/C++数据对齐详细解析
- C++基于栈实现铁轨问题
- C++中引用的使用总结
- 使用Lua来扩展C++程序的方法
- C++中调用Lua函数实例
- Lua和C++的通信流程代码实例
- C与C++之间相互调用实例方法讲解
- 解析C++中派生的概念以及派生类成员的访问属性