三目运算符(转自百度知道)
2016-03-27 10:36
162 查看
这里涉及了C中的优先级、结合性、求值顺序。 结合性只有在相同优先级的运算符间才起作用,比如a+b*c,+与*优先级不同,这里根本不用去管结合性。而a+b+c则需要进行结合性考虑了,如果+为左结合性,那么应该理解为:(a+b)+c,如果+为右结合性,那么应该理解为a+(b+c),当然了,我们已经知道+为左结合性了。 对于?:,在C中与它优先级相同的只有它自己,因此只有连续的?:才会体现出它的右结合性,即a?b:c?d:e中,根据右结合性可知应理解为a?b:(c?d:e)。显然,上述问题中是体现不出这种结合性来的。 再者,还有一个求值顺序的问题,a?b:c中,C语言规定先对a求值,非零则对b求值并作为该表达式的值,为零则对c求值并作为表达式的值,并且b和c中有且仅有一个会被求值。对于题目中的就应该是:先进行(--a == b++)的求值,根据是否为零,会对(a++)或(b++)进行求值。说白了,也就是只有两种可能性:可能性1:先算(--a == b++),再算(a++);可能性2:先算(--a == b++),再算(b++)。至于(--a == b++)中到底是先算--a 还是b++则仅从C语言这个角度是无法判别的,这是个实现问题,如果要想写出健壮的可移植的代码就应该避免这种表述。 总结一下,就是先看优先级,次看结合性,有的求值有序,有的则无序。
相关文章推荐
- 树莓派学习笔记(5):成功实现NAS家庭服务器(流媒体播放、文件共享及下载机)
- .NET AOP(一)七种AOP实现方法
- Cocoapods安装步骤
- 微型http服务器测试结果
- springmvc的ModelAttribute注解
- 通信协议:HTTP、TCP、UDP(转)
- 如何由方法论设计敏捷实践, 改变团队成员既有的思维, 行为模式?
- String,StringBuffer,StringBuilder的区别
- Android5.0 源码编译
- Ognl表达式语言
- 敏捷开发方法综述
- iOS边练边学--通讯录练习之Segue使用,控制器的数据传递
- neural network and deep learning笔记(1)
- FastDFS安装/使用(一)
- Cocos单点触摸
- 构建之法阅读笔记三
- 构建之法阅读笔记3
- CSU 1697 Surface Area of Cubes (思维)
- tomcat部署
- Cocos坐标体系