2

次のループを使用して、2 つのファイルから数値を読み取り、両方が使い果たされるまで読み込んでいます。

int a, b;
while (file1 >> a, file2 >> b, file1 || file2) {
    if (file1 && file2) ... // use of both a and b
    if (file1) ... // use of a
    if (file2) ... // use of b
}

私のプログラムは動作します。しかし、標準で動作することが保証されていますか? つまり、失敗したストリームからの読み取りを続行することは許可されていますか、それとも実装で例外をスローすることを選択できますか?

4

2 に答える 2

0

はい、できます。ストリームが失敗した状態 (failbit) になると、それ以降の読み取りも失敗しますが、これはあなたが望んでいたことです。これらの読み取りは例外をスローしません。フェイルビットは、ストリームのexceptions()メソッドを介して明示的に有効にされている場合にのみ例外を生成します。このソースによると、デフォルトでは、これらの例外は有効になっていません。

すべてのストリームには、デフォルトで goodbit があります (エラー状態フラグが設定されているため、例外はスローされません)。

于 2019-12-17T11:08:25.040 に答える