加速されたc++を読んでいるときに、不変条件がfalseになる理由についての説明に混乱しました(以下のコードを参照)。
不変条件は、作成者(この場合)によって次のように定義されています。
whileの不変条件は、これまでに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が書き込んだ行の数ではなくなるため、不変条件がfalseになります。
定義を考えると、私は2つの間の接続を形成することはできません。
出力の行が書き込んでいるときに不変条件がfalseになるのはなぜですか?