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

2020 年 2 月 6 日
 learningman

代码:

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

输出得到0

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

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

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

https://v2ex.xtra.eu.org/t/642630

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

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

© 2021 V2EX