在閱讀加速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是不再我們寫
鑑於定義我不能形成兩者之間的聯繫。
爲什麼當一行輸出寫入時,不變量會變成false?
我可能會錯過一些東西,但是'endl'放了一個換行符,所以你現在寫了一行輸出並且已經移到了第二行。增加'r'會使數字從0增加到1.在打印後你增加'r',它會保存你寫入0行的數據,但實際上你寫了1個。 – chris