我查看了标准,但没有看到明显的答案。
假设我已经这样做了:
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?
}