a&& b(如果a = 0,则不检查 *** 作数b)
a || b(如果a =非零,则不检查 *** 作数b)
但我坚持这个问题
int x = 0;if (5 || 2 && ++x) printf("%d",x);
这输出0.
我的第一个想法如下:
根据优先级表,优先级是&&,|| (降序排列)
> x:evaluated.x成为1.
> 2&& x评估.两个 *** 作数都被评估.
> ||被评估.
但据此,应该打印1,而不是0.
我的第二个想法是:
5 || anything
由于短路评估,任何事情都没有被评估,所以这里没有优先权.
解决方法 表达式5 || 2&& x相当于5 || (2&& x)由于运算符优先级.运行时计算表达式5 || 2&& x从左到右.
正如我们在OR中所知,如果第一个条件为真,则不会检查第二个条件.
所以这里5被评估为真,因此(2&& x)将不会被执行.
这就是为什么x将保持为0.
总结以上是内存溢出为你收集整理的使用\u0026\u0026 ||进行短路评估 *** 作者全部内容,希望文章能够帮你解决使用\u0026\u0026 ||进行短路评估 *** 作者所遇到的程序开发问题。
如果觉得内存溢出网站内容还不错,欢迎将内存溢出网站推荐给程序员好友。
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)