【发布时间】:2021-11-01 23:08:52
【问题描述】:
在我的if 语句中,&& 的第一个条件是0 (false),所以表达式0 && (a++) 等于0,对吧?那么0==0 应该是真的。为什么我在这里收到else?请解释!
int a=0;
if(0 && (a++)==0)
{
printf("Inside if");
}
else
{
printf("Else");
}
printf("%i",a);
【问题讨论】:
-
首先,
a++计算为 0,然后增加a。但即使它评估为非零值,==的绑定也比&&更强(具有更高的优先级),因此您的表达式等效于0 && ((a++) == 0),无论(a++) == 0评估为什么,这都是错误的。 -
==的优先级高于&&。添加括号(0 && (a++))==0 -
现在您已经有了答案,我建议您查看您的问题。你看到你的逻辑在哪里失败了吗? (一方面,这是一个有趣的问题,因为您的推论确实有效,但最终却不适用。)
-
if(0 && (a++)==0)是糟糕的代码,应该无法通过任何代码审查。让你去查找优先表的代码是完全错误的。你最终将写出这样的代码,即使你认为你有完美的记忆力(提示:没有人 ...)。一个真正简单的经验法则:如果一行代码的作用不是很明显,那就是错误。
标签: c++ c if-statement logical-operators equals-operator