为什么此代码有效? e
迭代器未分配任何内容。如何暗示该功能持续到fstream结束?
#include <vector>
#include <iostream>
#include <list>
#include <fstream>
#include <string>
#include <iterator>
using namespace std;
template<typename InputIterator>
void printRange(InputIterator first, InputIterator last)
{
while (first != last)
{
std::cout << *first << endl;
++first;
}
}
int main()
{
vector<int> v = { 11, 24, 541 };
printRange(v.begin(), v.end());
cout << endl;
list<double> lst = { 11.88, 21.4, 541.9 };
printRange(lst.begin(), lst.end());
cout << endl;
ifstream ifs{ "strings.txt" };
istream_iterator<string> i(ifs);
istream_iterator<string> e;
printRange(i, e);
}
strings.txt
coding c++
答案 0 :(得分:3)
变量e
是默认构造的,因此将调用0参数的构造函数。然后从the documentation:
constexpr istream_iterator();
构造流结束迭代器。这个构造函数是 如果
std::is_trivially_default_constructible_v<T>
为true,则为constexpr。
因此,默认构造istream_iterator
会构造流结束迭代器,这正是您需要的值。