搜索
查看: 647|回复: 7
打印 上一主题 下一主题

有关自增运算符的几个小问题。。。

[复制链接]
跳转到指定楼层
楼主
发表于 2014-9-29 09:19:42 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
5啊哈币
int x=0;int y=++x+x+++x++;

那么y等于几?
计算过程该怎么想?

最佳答案

查看完整内容

未定义的 两个紧邻时点x的值被改变3次
沙发
发表于 2014-9-29 09:19:43 | 只看该作者
未定义的
两个紧邻时点x的值被改变3次
板凳
 楼主| 发表于 2014-9-29 11:48:34 | 只看该作者
rosynirvana 发表于 2014-9-29 10:08
未定义的
两个紧邻时点x的值被改变3次

那x和y最后等于几?
地板
发表于 2014-9-29 11:52:50 | 只看该作者
本帖最后由 4399APPLE 于 2014-9-29 11:54 编辑
小飞侠2009 发表于 2014-9-29 11:48
那x和y最后等于几?

建议你自己去运行一下看看结果
复制代码
5#
 楼主| 发表于 2014-9-29 12:04:13 | 只看该作者
4399APPLE 发表于 2014-9-29 11:52
建议你自己去运行一下看看结果

运行了,x和y都是3。
但是不明白y为什么等于3。我觉得y=1+1+2=4
6#
 楼主| 发表于 2014-9-29 12:05:56 | 只看该作者
rosynirvana 发表于 2014-9-29 10:08
未定义的
两个紧邻时点x的值被改变3次

看了您写的那个教程了。
未定义就是不确定的意思吗,不同编译器不同结果?
7#
发表于 2014-9-29 12:09:40 | 只看该作者
小飞侠2009 发表于 2014-9-29 12:05
看了您写的那个教程了。
未定义就是不确定的意思吗,不同编译器不同结果?

不仅不同编译器不同
同一编译器不同版本也可能不同
同一版本同一编译器,优化程度不同,结果也可能不同

而且也不一定有结果,编译器也可以选择拒绝编译这句代码

未定义的含义在那个帖子里解释过了,如果有不理解的地方可以具体提问,我觉得不是一句不确定可以描述的
8#
发表于 2014-9-29 12:15:07 | 只看该作者
本帖最后由 rosynirvana 于 2014-9-29 12:17 编辑
小飞侠2009 发表于 2014-9-29 12:04
运行了,x和y都是3。
但是不明白y为什么等于3。我觉得y=1+1+2=4

y的值在于编译器决定的x自增副作用的结算时点,例如

首先进行词法划分
y = (++x) + (x++) + (x++);

y = (++x) + x + x
  => ++x + 0 + 0
  => ++x;
x = x + 1
  => 1;
x = x + 1
  => 2;
y = ++x
  => x + 1
  => 3
x = x + 1
  => 3
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

广播台
特别关注
快速回复 返回顶部 返回列表