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

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 < 8dst >= 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进行评估,但实际上只会完全"抛弃"第一个检查.

如果要正确评估此值,则应使用两个选项之一(通过||或显式指定行为&&).

有关详细信息,请参阅逗号运算符:

当必须为一个值计算表达式集时,只考虑最右边的表达式.

  • Aaaand我今天刚刚学到了新东西!:-谢谢 (3认同)
  • 哦,看看那个,完全不是我所期望的!谢谢,我会去修复我的代码... (2认同)

Dav*_*man 6

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