考虑代码:
if(x = a/b, a%b)
printf("do this");
else
printf("do that");
现在,如果我将if
语句替换为if(x = a/b && a % b)
. 然后它也有效。所以我想知道用&&
运算符替换逗号,反之亦然if-else and loops
考虑代码:
if(x = a/b, a%b)
printf("do this");
else
printf("do that");
现在,如果我将if
语句替换为if(x = a/b && a % b)
. 然后它也有效。所以我想知道用&&
运算符替换逗号,反之亦然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”仅在 a % b 非零时打印。
if(x = a/b, a%b)
是一种模糊的、不可读的写作方式
x = a/b;
if(a%b)
但
x = a/b && a % b
相当于
x = ( (a/b) && (a%b) );
总而言之,不要在同一条线上混合大量不同的运算符。你用它实现的唯一一件事就是在创造错误的同时迷惑自己。
a/b
&& 运算符在确定表达式时强制考虑 as 的结果x = a/b && a%b
,如果是,
,a/b
则忽略 的结果。因此,替换,
为&&
不会总是有效。而不是正确的做法,