Spa*_*ark 3 c c++ if-statement logical-operators equals-operator
在我的if陈述中, for 的第一个条件&&是0(false),所以表达式0 && (a++)等于0,对吗?那么0==0它应该是真的。我为什么else到这里?请解释!
int a=0;
if(0 && (a++)==0)
{
printf("Inside if");
}
else
{
printf("Else");
}
printf("%i",a);
Run Code Online (Sandbox Code Playgroud)
Sla*_*ica 19
该==经营者具有比更高的优先级&&运营商,所以这行:
if(0 && (a++)==0)
Run Code Online (Sandbox Code Playgroud)
是这样处理的:
if( 0 && ((a++)==0) )
Run Code Online (Sandbox Code Playgroud)
所以整个表达式if是假的,并且a++由于&&运算符的短路甚至没有被评估。
您可以在 cppreference.com 上阅读有关运算符优先级和关联性的信息。
如有疑问,您应该使用括号来清楚地表达您的意图。在这种情况下,它应该是:
if( (0 && (a++)) == 0 )
Run Code Online (Sandbox Code Playgroud)
尽管如此,它没有任何意义,因为它总是评估为true并且a++在这里也没有增加。
正如已经提到的, 的优先级==高于 的优先级&&,因此该语句被解析为
if( 0 && ((a++)==0))
Run Code Online (Sandbox Code Playgroud)
但是,即使添加正确的括号顺序,a++仍会返回 的原始值a,即0,但a会递增。如果你想返回 的更新值a,你应该写++a
if( ((++a) && 0) == 0 )
Run Code Online (Sandbox Code Playgroud)