私はistringstreamを使用しているときに気づいたことがあります。eof()は文字列全体が "消費されていても" trueを返しません。istringstreamがストリームの終わりに '-1'文字を追加するのはなぜですか?
char ch;
istringstream ss{ "0" };
ss >> ch;
cout << ss.peek() << " " << (ss.eof() ? "true" : "false");
出力(VS2015):例えば
-1 false
技術的にはその効果はプラットフォームに依存することができ、-1実際にEOFのコードではありません - EOFのコードは26ですが、「送信終了」のコード - 255一部のプロトコルでは、積極的にそれを使用、例えばFTPは、(その中にロシア文字яでファイルを転送したり、作成することが不可能 - 拡張ASCIIで文字コード255得たことので - のWindows XP FTPで非常に明白な問題を)それを使用しています – Swift
@Swift:Cマクロ 'EOF'は別個のものですASCII制御コード「EOF」から取得する。あなたはそれが基本的に常にあるものの、それは、実装定義だと-1ではないかもしれないということだね(他の負の値は、目的を持っていないため、そして何の正の値または0は意味がありません)。 –