免费注册 查看新帖 |

Chinaunix

  平台 论坛 博客 文库
最近访问板块 发新帖
查看: 38322 | 回复: 362
打印 上一主题 下一主题

抽人欢乐多 [复制链接]

论坛徽章:
0
跳转到指定楼层
1 [收藏(0)] [报告]
发表于 2012-05-28 19:31 |只看该作者 |倒序浏览
某昏昏说:
P64
先进行赋值运算(将b的值赋给a),然后判断a是否大于0
评:对“if((a=b)>0) max=a; ”的解说
        是错误的。
        解说所描述的是 a=b,a>0 这个表达式而不是(a=b)>0这个表达式



老谭的描述一点也没错,这里是有先后关系的。假如有另外一个线程在不断的给a赋值为1,那么在当前线程就可能会出现“b=-1而if ((a=b) > 0)为真”的情况

(a=b)>0这个表达式其实是有点偷懒的写法,只是很多人都这么写,也就没人特别的反对了。

a=b; if (a>0) max=a;
if((a=b)>0) max=a;

上面两种写法基本上是等价的。有很多人鼓励前面那种写法,认为那样写更不容易出错。

论坛徽章:
0
2 [报告]
发表于 2012-05-28 21:09 |只看该作者
@starwing83

这个算是抽的具体一点的。

某昏昏的批判里面,我看就是“纠正ISO的全称”那个最靠谱。

论坛徽章:
0
3 [报告]
发表于 2012-05-28 21:46 |只看该作者
本帖最后由 KBTiller 于 2012-05-28 21:46 编辑

表达式a=b的值和a的值不是一回事
尽管在这里相等

论坛徽章:
0
4 [报告]
发表于 2012-05-28 22:04 |只看该作者
本帖最后由 wwwsq 于 2012-05-28 22:08 编辑
KBTiller 发表于 2012-05-28 21:46
表达式a=b的值和a的值不是一回事
尽管在这里相等



从赋值操作符的语义来说,返回的就是对a的引用。

顶楼的重点在于,老谭的描述错在哪里?

某昏昏所说的 a=b,a>0 这个表达式而不是(a=b)>0  这两个表达式,除了写法不同,还有什么区别?

我认为某昏昏没有理解: (a=b)>0实际上是分两步的;并不是一个一次完成的操作。

老谭描述了这两个步骤,并且用了“然后”来描述两个步骤的时间先后关系,明显某昏昏没看懂老谭在说什么。



论坛徽章:
0
5 [报告]
发表于 2012-05-28 22:09 |只看该作者
wwwsq 发表于 2012-05-28 22:04
从赋值操作符的语义来说,返回的就是对a的引用。

我请教一下这个说法的依据或出处
据我所知
就C语言而言
这个表达式的值不可能是引用
因为不是左值

论坛徽章:
0
6 [报告]
发表于 2012-05-28 22:10 |只看该作者
KBTiller 发表于 2012-05-28 22:09
我请教一下这个说法的依据或出处
据我所知
就C语言而言


http://en.wikipedia.org/wiki/Assignment_operator_%28C%2B%2B%29
http://en.wikipedia.org/wiki/Operators_in_C_and_C%2B%2B

这两个资料结合在一起看就明白了。

论坛徽章:
0
7 [报告]
发表于 2012-05-28 22:13 |只看该作者
遇到了传说中的“让你看东西”

论坛徽章:
0
8 [报告]
发表于 2012-05-28 22:14 |只看该作者
回复 6# wwwsq

不好意思
这些我早就看过
没有你说的那回事


   

论坛徽章:
0
9 [报告]
发表于 2012-05-28 22:28 |只看该作者
本帖最后由 wwwsq 于 2012-05-28 22:29 编辑
KBTiller 发表于 2012-05-28 22:14
回复 6# wwwsq

不好意思



那好吧,请你对“if((a=b)>0)”进行一下比老谭更正确的解说。

有资料的话也请告诉我去研究一下。

我的理解也可能是错的。



论坛徽章:
0
10 [报告]
发表于 2012-05-28 22:36 |只看该作者
回复 9# wwwsq
“解说所描述的是 a=b,a>0 这个表达式而不是(a=b)>0这个表达式”


这个说法没有什么问题

这个表达式确实是判断 (a=b)的值是否大于0

   
您需要登录后才可以回帖 登录 | 注册

本版积分规则 发表回复

  

北京盛拓优讯信息技术有限公司. 版权所有 京ICP备16024965号-6 北京市公安局海淀分局网监中心备案编号:11010802020122 niuxiaotong@pcpop.com 17352615567
未成年举报专区
中国互联网协会会员  联系我们:huangweiwei@itpub.net
感谢所有关心和支持过ChinaUnix的朋友们 转载本站内容请注明原作者名及出处

清除 Cookies - ChinaUnix - Archiver - WAP - TOP