| 网站首页 | 业界新闻 | 小组 | 威客 | 人才 | 下载频道 | 博客 | 代码贴 | 在线编程 | 编程论坛
欢迎加入我们,一同切磋技术
用户名:   
 
密 码:  
共有 417 人关注过本帖
标题:令人迷惑的++a++
取消只看楼主 加入收藏
陨灭
Rank: 2
等 级:等待验证会员
帖 子:44
专家分:65
注 册:2013-4-21
结帖率:100%
收藏
 问题点数:0 回复次数:1 
令人迷惑的++a++
看到标题的时候您可能马上就想告诉我这样写很不好,甚至它根本不合法,经验丰富的程序员应该避免这样的表达式。我非常赞同这个观点,不过这不是我想问的问题。所以请耐心看完我的问题再回答。
假如现在在某个程序中我们看到++a++这样的表达式,我们应该如何解释?首先,后缀++优先级高于前缀++,因此,首先会拷贝一份a的副本,传递给其他操作符运算,并且a本身执行a=a+1操作。那么问题就来了,前缀++所执行的对象究竟是a本身,还是由后缀++传递过来的副本?如果是a本身,那么a的值就会再加一;但如果针对的是副本,那么理所应当a的值就不会改变。我们应该如何思考编译器对这样的表达式的态度?受条件所限,我无法在大量不同机器和不同编译器上验证,所以请知道的大神给予解释,谢谢!

当然,这个问题还有其他问法,比如考虑&a++究竟传递的是谁的地址?对于c语言把这个搞清楚我认为还是有意义的。
PS:我在vc6++上测试结果是报错,但其他编译器就不知道了。
搜索更多相关主题的帖子: 表达式 程序员 优先级 如何 
2014-11-23 16:21
陨灭
Rank: 2
等 级:等待验证会员
帖 子:44
专家分:65
注 册:2013-4-21
收藏
得分:0 
回复 2 楼 ouyangshit
我上面已经说了的嘛,vc6报错……但是从网上找的回复来看,貌似有些也不会报错,还看到一个诸如int b = ++a+++a++;的题……感觉出这题的老师大概自己都没学好。还有说b=(++a)++可以,但实际上也不行,理论上++a也是返回a的副本,所以报错是应该的,我就不知道那些不报错的编译器是怎么考虑的,这也是我问题所在,假如我要写编译器,究竟要怎么考虑它才最合理呢?

1@w-h.win
2014-11-23 17:25
快速回复:令人迷惑的++a++
数据加载中...
 
   



关于我们 | 广告合作 | 编程中国 | 清除Cookies | TOP | 手机版

编程中国 版权所有,并保留所有权利。
Powered by Discuz, Processed in 0.028009 second(s), 8 queries.
Copyright©2004-2024, BCCN.NET, All Rights Reserved