| 网站首页 | 业界新闻 | 小组 | 威客 | 人才 | 下载频道 | 博客 | 代码贴 | 在线编程 | 编程论坛
欢迎加入我们,一同切磋技术
用户名:   
 
密 码:  
共有 2614 人关注过本帖
标题:&&的用法
只看楼主 加入收藏
TonyDeng
Rank: 20Rank: 20Rank: 20Rank: 20Rank: 20
等 级:贵宾
威 望:304
帖 子:25859
专家分:48889
注 册:2011-6-22
收藏
得分:0 
参数求值没有规定顺序,这种同一优先级的都是从左至右。

授人以渔,不授人以鱼。
2013-04-12 16:29
邓士林
Rank: 19Rank: 19Rank: 19Rank: 19Rank: 19Rank: 19
来 自:淮河河畔
等 级:贵宾
威 望:61
帖 子:2392
专家分:13384
注 册:2013-3-3
收藏
得分:2 
我给你个代码:
#include<stdio.h>
int main()
{
    int i=0,j=0,k=0;
    if(i++&&j++&&k++);
        printf("%d%d%d",i,j,k);
    return 0;
}

Maybe
2013-04-12 18:09
y3765258
Rank: 3Rank: 3
等 级:论坛游侠
帖 子:106
专家分:172
注 册:2013-4-9
收藏
得分:2 
1 0 0 短路问题

有问题一起探讨,一起进步。
2013-04-12 20:40
子楠
Rank: 3Rank: 3
来 自:武汉
等 级:论坛游侠
帖 子:111
专家分:164
注 册:2013-4-9
收藏
得分:2 
6楼说的有理呀。
i++先使用再自加,
2013-04-12 20:50
fanpengpeng
Rank: 8Rank: 8
来 自:南极洲
等 级:蝙蝠侠
威 望:7
帖 子:299
专家分:849
注 册:2013-2-1
收藏
得分:0 
回复 9楼 peach5460
有四个运算符是明确规定求值顺序的
&&
||
?:
,
不是优先级相同 结合性从左至右的问题 优先级和结合性也不能用来确定求值顺序的

人生是一场错过 愿你别蹉跎
2013-04-12 20:56
peach5460
Rank: 15Rank: 15Rank: 15Rank: 15Rank: 15
来 自:武汉
等 级:贵宾
威 望:30
帖 子:2780
专家分:6060
注 册:2008-1-28
收藏
得分:0 
以下是引用fanpengpeng在2013-4-12 20:56:23的发言:

有四个运算符是明确规定求值顺序的  
&&
||
?:
,
不是优先级相同 结合性从左至右的问题 优先级和结合性也不能用来确定求值顺序的

这个问题在两年前,我深究过...
ISO是没有明确定义求值顺序的...

因为,如果逻辑运算符的每一个单个逻辑判断结果是一定的
我优先做任何判断得到的整个逻辑运算的结果都是一定的
这个不需要我写证明吧...

而对于在逻辑运算中存在计算的情况
ISO建议先得到确定的值再进行逻辑判断...
也就是说ISO认为,在逻辑运算中进行数据处理本身就是一种不负责的行为,应该与以杜绝...

另外说一句,现在的主流编译器GCC和VC基本上都是从左往右(好像)
所以很多被ISO认为应该拖出去砍死的人都可以正常的写代码...

再另外,微软的C++编译器绝对是从左往右的...
MFC里面有很多佐证...

可能是我傲娇了,我只是想告诉你....
其实你被编译器宠坏了,呵呵

我总觉得授人以鱼不如授人以渔...
可是总有些SB叫嚣着:要么给代码给答案,要么滚蛋...
虽然我知道不要跟SB一般见识,但是我真的没修炼到宠辱不惊...
2013-04-12 21:21
fanpengpeng
Rank: 8Rank: 8
来 自:南极洲
等 级:蝙蝠侠
威 望:7
帖 子:299
专家分:849
注 册:2013-2-1
收藏
得分:0 
所以很多被ISO认为应该拖出去砍死的人都可以正常的写代码...

这个确实是的 谈标准往往会陷入这样一个窘境 明明标准规定这样做是不保证正确的 但由于大多数编译器对某些未定义问题的行为一致
所以就没法谈了 你找不出一个让他们不写这样的代码的理由
比如 y*=y+=y+1; 这样的式子 几乎在所有编译器上的结果都一致 所有就有很多人 能对此作出一番很自信的解释
因为,如果逻辑运算符的每一个单个逻辑判断结果是一定的
我优先做任何判断得到的整个逻辑运算的结果都是一定的
这个不需要我写证明吧...

标准我没有研究过 因为标准也大部分参考了 K&R C ,他对逻辑运算符的求值顺序是明确规定的 考虑的不是从哪边开始算 结果一致不一致的问题
而是 考虑到 某些情况下 在第一个式子不成立的情况下 对第二个式子是不能求值的 比如指针判零 p != NULL && *p > 5 这类的
可能由于标准委员会的强迫症 (要么所有的都有顺序 要么就都没有 有的有 有的没有 就不爽)把他给裁掉了 开玩笑的

人生是一场错过 愿你别蹉跎
2013-04-12 21:48
TonyDeng
Rank: 20Rank: 20Rank: 20Rank: 20Rank: 20
等 级:贵宾
威 望:304
帖 子:25859
专家分:48889
注 册:2011-6-22
收藏
得分:0 
表达式从左至右是人类的自然思维习惯,计算机语言是模拟人类行为的,这种求值顺序很自然。从左边算下来,发现已经能够确定最终逻辑结论了,就可以结束动作不继续做无用功。对于逻辑表达式的求值就是这样。

授人以渔,不授人以鱼。
2013-04-12 21:53
peach5460
Rank: 15Rank: 15Rank: 15Rank: 15Rank: 15
来 自:武汉
等 级:贵宾
威 望:30
帖 子:2780
专家分:6060
注 册:2008-1-28
收藏
得分:0 
所以我后来觉得深究没意思,就算了...反正从左往右算,99%的编译器都不会挂,也就无所谓了

今天看到有个人问这个,两年前的无聊八卦心理又被激活了,哈哈

我总觉得授人以鱼不如授人以渔...
可是总有些SB叫嚣着:要么给代码给答案,要么滚蛋...
虽然我知道不要跟SB一般见识,但是我真的没修炼到宠辱不惊...
2013-04-12 21:57
TonyDeng
Rank: 20Rank: 20Rank: 20Rank: 20Rank: 20
等 级:贵宾
威 望:304
帖 子:25859
专家分:48889
注 册:2011-6-22
收藏
得分:0 
至于所谓的“标准”,其实很无聊,不过是一些大家都愿意提供和遵守的东西,当某个编译器厂家或程序员觉得不需要遵守的时候,“标准”就是个屁,程序最终能够完美运行就是他的胜利。苹果并不遵守IT业的“标准”,它也不打算要把自己的东西移植到别人的机器或平台上,它仍然是苹果品牌,而且名声不坏。微软不愿意接纳C99的那些东西,它的编译器就不支持,同样它也不需要保证你用所谓的C99标准写的程序能在它的编译器上编译成功,但你编译出来的可执行是否能够在微软的操作系统上执行成功轮不到你自己说了算,你可以不用这些操作系统,那是你的自由,他让你有自由选择权,并没有剥夺。void main(void),就是微软上可行的,那些总对此说三道四的,其实很无聊,写这种代码的,只要不打算换编译器,他编译出来的可执行程序也能够在别的环境中跑,就没什么可说的。

授人以渔,不授人以鱼。
2013-04-12 22:01
快速回复:&&的用法
数据加载中...
 
   



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

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