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;
}
所以唯一的区别是执行各种语句的顺序。请注意,逗号运算符从左到右求值,其中最左边的操作数保证首先执行。
根据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;
}
所以唯一的区别是执行各种语句的顺序。请注意,逗号运算符从左到右求值,其中最左边的操作数保证首先执行。