考虑代码:
if(x = a/b, a%b)
printf("do this");
else
printf("do that");
现在,如果我用if(x = a/b && a % b)
替换if
语句。然后它也起作用。所以我想知道,用&&
运算符替换逗号,反之亦然,在if-else and loops
中总是有效还是无效
它们完全不同!
在第一个示例中,,
是逗号运算符,它是一个二进制运算符,用于计算第一个操作数并丢弃结果,然后计算第二个操作数,并返回此值(和类型(。
所以,
if(x = a/b, a%b)
相当于(多亏了@jaket(
x = a/b;
if(a%b)
a%b
将始终被评估。
第二个:
if(x = a/b && a % b)
相当于
x = (a/b) && (a%b);
if( x )
只有当a/b
(即a/b
不为零(为真时,才会评估a%b
。
如果用&;,你稍微改变了一下逻辑。逗号运算符所做的是,它将执行x=a/b并"丢弃结果",即不考虑if条件,只考虑a%b。
如果你做
if(x = a/b && a % b)
则当且仅当a/b为非零且a%b为非零时,才会打印"do this"。而使用逗号运算符时,只有当%b为非零时,才会打印"do this"。
if(x = a/b, a%b)
是一种模糊、不可读的书写方式
x = a/b;
if(a%b)
但是
x = a/b && a % b
相当于
x = ( (a/b) && (a%b) );
总之,不要在同一条线上混合很多不同的运算符。你用它实现的唯一的事情是在制造bug的同时混淆自己。
&运算符在确定表达式x = a/b && a%b
时也强制考虑a/b
的结果。在,
的情况下,忽略a/b
的结果。因此,用&&
替换,
并不总是有效的。这不是正确的做法,