C++ for循环更新表达式中的赋值表达式

Assignment expression in C++ for-loop update expression

根据cppreference.com更新表达式,或迭代表达式for循环在C++语言中可以

any expression, which is executed after every iteration of the loop and before re-evaluating condition.

因此,我认为以下 for 循环是正确的:

//initializations

Point cursor;
cursor.y = minR * pixelSpacing.y + origin.y;
for (int r = minR; r <= maxR; r++, cursor.y += pixelSpacing.y, cursor.x = minC * pixelSpacing.x + origin.x)
{
    //loop statements
}

但是我在循环结束时得到的结果和用下面代码得到的结果不一样:

//initializations

Point cursor;
cursor.y = minR * pixelSpacing.y + origin.y;
for (int r = minR; r <= maxR; r++, cursor.y += pixelSpacing.y)
{
    cursor.x = minC * pixelSpacing.x + origin.x;

    //loop statements
}

因此在for[=29]的更新表达式中使用赋值表达式是否无效=]循环?

这个

for (int r=minR; r<=maxR; r++, cursor.y += pixelSpacing.y, cursor.x = minC * pixelSpacing.x + origin.x)

相当于:

for (int r=minR; r<=maxR; /* nothing here */)
{
  /* loop body here */

  r++;
  cursor.y += pixelSpacing.y; 
  cursor.x = minC * pixelSpacing.x + origin.x;
}

所以唯一的区别是执行各种语句的顺序。请注意,逗号运算符从左到右求值,其中最左边的操作数保证首先执行。