簡體   English   中英

istream_iterator和惰性評估

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM