我已经多次检查了这个......
int bla(int);
if (x = bla(2) < 0) (1)
if ((x = bla(2)) < 0) (2)
我想要做的是检查bla(int)的返回值是否为负,然后将其保持为x。
然而,有时(1)完美有效,有时不能,但我无法解释。 我在C写作。
答案 0 :(得分:2)
答案 1 :(得分:2)
你需要在C#,C和C ++中注意=
=是赋值运算符,而不是比较
它的优先级也低于&lt;。
所以在(1)中你要分配bla(2)&lt;的结果。 0到x,因此x将为true或false(或者更正式地说,x的类型为true或false)。 if语句对x的值进行操作; “是x是真还是假”。
在(2)中你使x取值为bla(2),这是一个值为x的表达式,你检查它是否小于零。 if语句在返回问题“x小于零”时运行。
答案 2 :(得分:2)
两个陈述不同的原因是运营商优先......
<
的优先级高于=
。
这意味着
if (x = bla(2) < 0)
评估如下:blah(2)
的返回值与零进行比较,因为<
的优先级高于'='。如果小于零则为真结果,否则为假。然后将此布尔值隐式转换为整数并分配给x。因此,在此语句中,x为true或false,x的值用于评估if()
条件。
声明
if ((x = bla(2)) < 0)
更改优先顺序,因为x
的赋值现在被括号括起来,所以将首先完成。因此,x被赋值为blah(2)
。然后比较x的值,如果小于零则if()
块运行。
我认为,从你的问题来看,你试图做的却是......
int tmp = blah(2);
if(tmp < 0)
x = tmp;
答案 3 :(得分:1)
我相信你首先要做的是x =真或假。因为它评估bla&lt; 0首先。
在第二个你正在制作x = bla。然后评估x&lt; 0