use*_*501 10 c++ for-loop multiple-conditions
我使用for循环来设置源和目标索引来复制数组中的项目.
for(int src = 0, dst = 8;
src < 8, dst >= 0;
src ++, dst --)
{
arr2[dst] = arr1[src];
}
Run Code Online (Sandbox Code Playgroud)
无论如何都是这样的.
我的问题是退出条件.这里有两个.src < 8和dst >= 0.这些条件是AND-ed(&&)还是OR-ed(||).
为了进一步解释,条件评估如下:
(src < 8) && (dst >= 0)
Run Code Online (Sandbox Code Playgroud)
或者他们是这样评价的?
(src < 8) || (dst >= 0)
Run Code Online (Sandbox Code Playgroud)
或者它是完全不同的东西?我认为合乎逻辑的做法是评估我在上面指定的两种方式中的一种,而不是其他方式.
Ree*_*sey 19
逗号运算符将返回正确表达式的值,因此写下:
src < 8, dst >= 0;
Run Code Online (Sandbox Code Playgroud)
因为条件与写作一样dst >= 0.的src < 8将在此情况下,可以完全忽略,因为它是从第二个条件分别进行评估,然后返回第二个条件.这不会对AND或OR进行评估,但实际上只会完全"抛弃"第一个检查.
如果要正确评估此值,则应使用两个选项之一(通过||或显式指定行为&&).
有关详细信息,请参阅逗号运算符:
当必须为一个值计算表达式集时,只考虑最右边的表达式.
逗号运算符计算第一个表达式并丢弃结果。然后它评估第二个,这就是 if 中测试的值。你会发现你的条件不是 && 也不是 || 但行为与 if(dst >= 0) 完全一样。有时,该表单对于在执行测试之前在循环结束时更改值很有用。