C ++:for循环中的多个退出条件(多个变量):AND -ed或OR -ed?

时间:2013-08-05 16:56:21

标签: c++ for-loop multiple-conditions

对于循环和多个变量和条件。

我使用for循环设置源索引和目标索引来复制数组中的项目。

for(int src = 0, dst = 8;
    src < 8, dst >= 0;
    src ++, dst --)
{
    arr2[dst] = arr1[src];
}

无论如何都是这样的。

(AND)|| (||)

我的问题是退出条件。这里有两个。 src < 8dst >= 0。这些条件是否为(&&)或OR-ed(||)。

为了进一步解释,条件评估是这样的:

(src < 8) && (dst >= 0)

或者他们是这样评价的?

(src < 8) || (dst >= 0)

还是其他完全不同的东西?我认为合乎逻辑的做法是评估我在上面指定的两种方式中的一种,而不是其他方式。

3 个答案:

答案 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