我目前正在通过"Accelerated C++"工作,并在第3章中遇到了这个问题:
// invariant:
// we have read count grades so far, and
// sum is the sum of the first count grades
while (cin >> x) {
++count;
sum += x;
}
Run Code Online (Sandbox Code Playgroud)
作者通过解释不变量需要特别注意它来遵循这一点,因为当读入输入时x,我们将读取count + 1等级,因此不变量将是不真实的.同样,当我们增加计数器时,sum将不再是最后计数等级的总和(如果您没有猜到,这是计算学生分数的传统程序).
我不明白为什么这很重要.当然对于任何其他循环,类似的陈述是真的吗?例如,这是本书的第一个while循环(输出稍后填写):
// invariant: we have written r rows so far
while (r != rows) {
// write a row of output
std::cout << std::endl;
++r;
}
Run Code Online (Sandbox Code Playgroud)
一旦我们编写了适当的输出行,那么在我们增加之前,不变量肯定是假的r,就像在另一个例子中一样吗?
是什么让这两个条件不同?
编辑:谢谢你的所有回复. 我想我已经得到了它,但是在我选择一个"接受的答案"之前我还要再花一点时间才能确定. 到目前为止,所有回复基本上都是一致的,所以看起来不太公平,但我觉得值得做.
原始段落,如下所述:
"理解这个循环的不变量需要特别小心,因为while中的条件有副作用.这些副作用会影响不变量的真实性:成功执行cin >> …