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

Posted

技术标签:

【中文标题】C ++:for循环中的多个退出条件(多个变量):AND -ed或OR -ed?【英文标题】:C++: Multiple exit conditions in for loop (multiple variables): AND -ed or OR -ed? 【发布时间】:2013-08-06 11:28:43 【问题描述】:

for 循环和多个变量和条件。

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

for(int src = 0, dst = 8;
    src < 8, dst >= 0;
    src ++, dst --)

    arr2[dst] = arr1[src];

反正就是这样。

(与) || (||)

我的问题是关于退出条件的。这里有两个。 src &lt; 8dst &gt;= 0。这些条件是 AND-ed (&amp;&amp;) 还是 OR-ed (||)。

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

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

或者他们是这样评价的?

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

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

【问题讨论】:

【参考方案1】:

在启用 -Wall 的情况下甚至会发出警告:

ILI9341.cpp:711:28: warning: left operand of comma operator has no effect [-Wunused-value]
   for(int j = x, jj = 0; j < fbw, jj < w; ++j, ++jj)
                          ~~^~~~~

【讨论】:

【参考方案2】:

逗号运算符计算第一个表达式并丢弃结果。然后它评估第二个,这就是 if 中测试的值。你会发现你的条件不是&&也不是||但行为与 if(dst >= 0) 完全相同。有时表单对于在执行测试之前在循环结束时更改值很有用。

【讨论】:

【参考方案3】:

逗号运算符将返回正确表达式的值,所以写成这样:

 src < 8, dst >= 0;

作为一个条件将与只写dst &gt;= 0 相同。在这种情况下,src &lt; 8 将被完全忽略,因为它与第二个条件分开评估,然后返回第二个条件。这不会评估为 AND 或 OR,但实际上只是具有完全“丢弃”第一个检查的效果。

如果您想正确评估这一点,您应该使用两个选项之一(通过||&amp;&amp; 明确指定行为)。

详情见Comma Operator:

当必须对一组表达式求值时,只考虑最右边的表达式。

【讨论】:

哦,好吧,看那,完全不是我所期望的!谢谢,我去修复我的代码...

以上是关于C ++:for循环中的多个退出条件(多个变量):AND -ed或OR -ed?的主要内容,如果未能解决你的问题,请参考以下文章

将 for 循环中的多个打印输出值存储到列表或变量中

for循环执行顺序?

在python中的单个列表上使用多个变量(for循环)[重复]

如何根据嵌套循环中的多个变量报告进度(对于进度条)?

具有多个条件的 for 循环向量化

在 for 循环中包含多个条件