一个关于 C 语言中运算符优先级的小问题

2020-02-06 21:31:10 +08:00
 learningman

代码:

#include "bits/stdc++.h"
using namespace std;
int main()
{
    int a=0;
    a&&++a;
    cout<<a<<endl;
}

输出得到0

但是运算符++的优先级不应该高于&&吗,为什么先判断了&&,导致 a 的数值没有改变?

3395 次点击
所在节点    C
34 条回复
111qqz
2020-02-07 01:19:37 +08:00
@111qqz 语病了。。 凑活着看吧
nvkou
2020-02-07 01:58:04 +08:00
该不会还在用谭浩强吧
leido
2020-02-07 03:02:28 +08:00
一看就是短路求值啊
jeenysem
2020-02-07 09:17:57 +08:00
a == 0,所以表达式 a&&++a 结果为 false,++a 没有执行。
BingZ
2020-02-07 09:19:37 +08:00
学校再敢这么出题,真是要再毁下一代码农啊?那么多好的思想概念不去深究,老是搞这些糟粕,哎。
程序写出来还是要给人看的,这是学校最应该教的。
fuchunliu
2020-02-07 09:32:07 +08:00
不确定的情况请用括号
bruce00
2020-02-07 10:04:56 +08:00
昨天刚好看到这章,C 语言程序设计(第三版)(苏小红)第 81 页,“注意,运算符 && 和 || 都具有‘短路’特性”,既然是特性。。。emmmmm
sumarker
2020-02-07 10:15:20 +08:00
并不实用
其实我也不会
建议分行并加括号
52coder
2020-02-07 10:32:54 +08:00
a==0,&&的结果一定为 0,不会往后走了,不涉及优先级问题,&&就是要先计算左边。
inhzus
2020-02-07 11:57:31 +08:00
等价于 if(!a) ++a;
learningman
2020-02-07 12:16:02 +08:00
@nvkou C Primer Plus
learningman
2020-02-07 12:16:17 +08:00
@nvkou 学校发的确实是谭浩强。。。
lance6716
2020-02-07 17:36:26 +08:00
这个&&用他的短路特性,还不算偏吧,好多场景都这么用
xFrye
2020-02-08 01:10:06 +08:00
你问老师出这种题目的意义是什么。。 括号这么好用的运算符不用

这是一个专为移动设备优化的页面(即为了让你能够在 Google 搜索结果里秒开这个页面),如果你希望参与 V2EX 社区的讨论,你可以继续到 V2EX 上打开本讨论主题的完整版本。

https://www.v2ex.com/t/642630

V2EX 是创意工作者们的社区,是一个分享自己正在做的有趣事物、交流想法,可以遇见新朋友甚至新机会的地方。

V2EX is a community of developers, designers and creative people.

© 2021 V2EX