(C++)关于i++和i++的左值、右值问题
来源:互联网 发布:c语言 设备端接入 编辑:程序博客网 时间:2024/06/05 10:18
1、什么是左值和右值?
左值就是出现在表达式左边的值(等号左边),可以被改变,他是存储数据值的那块内存的地址,也称为变量的地址;
右值是指存储在某内存地址中的数据,也称为变量的数据。
左值可以作为右值,但右值不可以是左值。
因此也只有左值才能被取地址。
2、举两个问题:
int i = 0;
(i++)+=i; //错误
(++i)+=i; //正确
int *ip = &(i++); //错误
int *ip = &(++i); //正确
3、为什么i++不能作左值?
我们来看i++和i++的实现就明白了。
1
2
3
4
5
6
// 前缀形式:
int
&
int
::operator++()
//这里返回的是一个引用形式,就是说函数返回值也可以作为一个左值使用
{
//函数本身无参,意味着是在自身空间内增加1的
*
this
+= 1;
// 增加
return
*
this
;
// 取回值
}
1
2
3
4
5
6
7
//后缀形式:
const
int
int
::operator++(
int
)
//函数返回值是一个非左值型的,与前缀形式的差别所在。
{
//函数带参,说明有另外的空间开辟
int
oldValue = *
this
;
// 取回值
++(*
this
);
// 增加
return
oldValue;
// 返回被取回的值,临时变量
}
简单得到理解,就是i++返回的是一个临时变量,函数返回后不能被寻址得到,它只是一个数据值,而非地址,因此不能作为左值。
更简单的代码解释:
1
2
3
4
5
6
7
8
9
10
11
12
13
// i++:
{
int
tmp;
tmp=i;
i=i+1;
return
tmp;
}
// ++i:
{
i=i+1;
return
i;
}
阅读全文
0 0
- (C++)关于i++和i++的左值、右值问题
- 关于i++和++i以及左值,右值
- 关于i++和++i以及左值,右值
- 关于i++和++i以及左值,右值
- 关于i++和++i以及左值,右值
- 关于i++和++i以及左值,右值
- 关于i++和++i以及左值,右值
- c语言i++和++i和左值的问题
- 左值的定义和i++,++i
- 关于java中i++,++i和i++ + ++i的问题
- [C++]关于i++和++i的学习
- [C++]关于i++和++i的学习
- [C++]关于i++和++i的学习
- [C++]关于i++和++i的学习
- 关于i++和++i的问题
- 关于i++和++i的性能问题
- 关于++i和i++的问题
- java面试题inti=2;i+=i-=i*i的值以及关于i++;++i;i=i+1;i+=1 的效率问题
- JavaScript获取java变量值
- oracle多表查询
- 字典树 总结
- 20171007-Java入门笔记(一)this、覆写、equals、==
- HTML技术短暂的学习总结
- (C++)关于i++和i++的左值、右值问题
- PathMeasure之直播间送爱心
- Linux命令之exit
- 结构体定义的几种方式
- 栈的应用-----括号配对
- 关于Json格式中时间格式转化问题
- Codeforces 101206 I & HDU 6007 Mr. Panda and Crystal
- iOS -如何让你写的代码更规范
- poj2226