加法与预增量失去 1
Addition with preincrement losing 1
为什么 TestAddition 结果是 12 而不是 13?它应该是 5 + 1 + 7 = 13,但是断言失败
Expected: 13
But was: 12
int method(int a)
{
return 7;
}
[Test]
public void TestAddition()
{
int row = 5;
row += method(++row);
Assert.AreEqual(13, row, "Why is it twelve instead of 13?");
}
row += method(++row);
与
相同
row = row + method(++row);
操作数是从左到右计算的,因此左操作数 (row
) 的值在 row
在 method(++row)
递增之前计算。
预期结果为 12。
因为你的
row += method(++row);
等于
row = row + method(++row);
因为 +
operator is left associative,它首先计算 row
作为 5
并且 method
总是 return 7
no matter 它需要哪个参数。
row = row + method(++row);
^ ^
5 7
这就是为什么结果会是 12
。
为什么 TestAddition 结果是 12 而不是 13?它应该是 5 + 1 + 7 = 13,但是断言失败
Expected: 13
But was: 12
int method(int a)
{
return 7;
}
[Test]
public void TestAddition()
{
int row = 5;
row += method(++row);
Assert.AreEqual(13, row, "Why is it twelve instead of 13?");
}
row += method(++row);
与
相同row = row + method(++row);
操作数是从左到右计算的,因此左操作数 (row
) 的值在 row
在 method(++row)
递增之前计算。
预期结果为 12。
因为你的
row += method(++row);
等于
row = row + method(++row);
因为 +
operator is left associative,它首先计算 row
作为 5
并且 method
总是 return 7
no matter 它需要哪个参数。
row = row + method(++row);
^ ^
5 7
这就是为什么结果会是 12
。