[英]istream_iterator and lazy evaluation
考慮到istream_iterator
的惰性評估,我想知道是否可以為條件依賴已初始化但從未取消引用或遞增的迭代器。
舉個例子:
#include <iostream>
#include <fstream>
#include <iterator>
using namespace std;
int main(void)
{
ifstream file("some_directory");
istream_iterator<int> beg(file), eof;
if (beg != eof) {
//do something
}
else {
cerr << "No Input!" << endl;
}
}
給定此代碼示例,我的問題是:即使file
為空,也可能(beg != eof)
被評估為true
嗎?
給定此代碼示例,我的問題是:即使
file
為空,也可能(beg != eof)
被評估為true
嗎?
否。標准說(24.6.1 / 1-2)說,
構造[
istream_iterator
]之后,每次使用++
,迭代器都會讀取並存儲T
的值。 如果迭代器無法讀取和存儲T
...的值,則該迭代器將等於流末迭代器的值。 ...兩個流結束迭代器始終相等。 流結束迭代器不等於非流結束迭代器。 當兩個非流結束迭代器由同一流構造時,它們是相等的。
換句話說,這並不像您想的那么懶:
istream_iterator<int> beg(file)
它會讀取第一個int
。 如果文件為空,它將失敗並立即成為流結束迭代器。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.