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 < 8
和 dst >= 0
。这些条件是 AND-ed (&&
) 还是 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 >= 0
相同。在这种情况下,src < 8
将被完全忽略,因为它与第二个条件分开评估,然后返回第二个条件。这不会评估为 AND 或 OR,但实际上只是具有完全“丢弃”第一个检查的效果。
如果您想正确评估这一点,您应该使用两个选项之一(通过||
或&&
明确指定行为)。
详情见Comma Operator:
当必须对一组表达式求值时,只考虑最右边的表达式。
【讨论】:
哦,好吧,看那,完全不是我所期望的!谢谢,我去修复我的代码...以上是关于C ++:for循环中的多个退出条件(多个变量):AND -ed或OR -ed?的主要内容,如果未能解决你的问题,请参考以下文章