我使用for循环设置源索引和目标索引来复制数组中的项目。
for(int src = 0, dst = 8;
src < 8, dst >= 0;
src ++, dst --)
{
arr2[dst] = arr1[src];
}
无论如何都是这样的。
我的问题是退出条件。这里有两个。 src < 8
和dst >= 0
。这些条件是否为(&&
)或OR-ed(||
)。
为了进一步解释,条件评估是这样的:
(src < 8) && (dst >= 0)
或者他们是这样评价的?
(src < 8) || (dst >= 0)
还是其他完全不同的东西?我认为合乎逻辑的做法是评估我在上面指定的两种方式中的一种,而不是其他方式。
答案 0 :(得分:18)
逗号运算符将返回正确表达式的值,因此请写下:
src < 8, dst >= 0;
条件与编写dst >= 0
的条件相同。在这种情况下,src < 8
将被完全忽略,因为它与第二个条件分开计算,然后返回第二个条件。这不会对AND或OR进行评估,但实际上只会完全“抛弃”第一张支票。
如果您想要正确评估,请使用以下两个选项之一(通过||
或&&
明确指定行为)。
有关详细信息,请参阅Comma Operator:
当必须为一个值计算表达式集时,只考虑最右边的表达式。
答案 1 :(得分:2)
逗号运算符计算第一个表达式并丢弃结果。然后它评估第二个,这就是在if中测试的值。你会发现你的病情不是&amp;&amp;也不是||但行为与if(dst&gt; = 0)完全相同。有时,在执行测试之前,表单对于在循环结束时更改值非常有用。
答案 2 :(得分:0)
在启用 -Wall 的情况下甚至会发出警告:
CachingConnectionFactory.cacheProducers