在阅读加速 c++ 时,我对为什么不变量变为假的解释感到困惑(参见下面的代码):
作者(在这种情况下)将不变量定义为:
我们的不变式是到目前为止我们已经写了 r 行输出。当我们定义 r 时,我们给它一个初始值 0。此时,我们还没有写任何东西。将 r 设置为 0 显然使不变量为真,因此我们满足了第一个要求。
// invariant: we have written r rows so far
int r = 0;
// setting r to 0 makes the invariant true
while (r != rows) {
// we can assume that the invariant is true here
// writing a row of output makes the invariant false <- WHY?
std::cout << std::endl;
// incrementing r makes the invariant true again
++r;
}
// we can conclude that the invariant is true here
然后后来解释...
写一行输出会导致不变量变为假,因为 r 不再是我们写的行数
鉴于定义,我无法在两者之间建立联系。
当一行输出正在写入时,为什么不变量会变为假?