22

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

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

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

反正是这样的。

(与) || (||)

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

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

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

或者他们是这样评价的?

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

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

4

3 回答 3

35

逗号运算符将返回正确表达式的值,因此编写如下:

 src < 8, dst >= 0;

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

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

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

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

于 2013-08-05T16:58:45.567 回答
6

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

于 2013-08-05T17:04:05.520 回答
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)
                          ~~^~~~~
于 2021-03-10T06:17:27.523 回答