私は標準を見ましたが、明白な答えは見当たりませんでした。
私がこれをしたとしましょう:
std::istream_iterator<char> is(file);
while(is != std::istream_iterator<char>()) {
++is;
}
現在is
はストリームの最後にあり、に等しくなりstd::istream_iterator<char>()
ます。もう一度インクリメントするとどうなりますか?それはまだ等しいstd::istream_iterator<char>()
ですか?またはos結果は未定義ですか?
がストリームの最後にある*is
場合、標準はそれが未定義の動作であると明示的に述べています。is
しかし、ストリームの終わりを超えて反復することに関しては何も見ていません...
編集:
私はこのようなことをするいくつかのコードに出くわしたので尋ねます:
// skip 2 input chars
++is;
++is;
if(is != std::istream_iterator<char>()) {
// continue using is and do some work...but what if the first
// increment made it EOS? is this check valid?
}