我正在阅读“Accelerated C++”一书的第 8 章。第 8.3 节是关于输入和输出迭代器的:
vector<int> v; // read ints from the standard input and append them to v copy(istream_iterator<int>(cin), istream_iterator<int>(), back_inserter(v));
[...]
复制的第二个参数创建一个默认(空)istream_iterator,它不绑定到任何文件。istream_iterator 类型有一个默认值,其属性是任何已到达文件结尾或处于错误状态的 istream_iterator 似乎都等于默认值。因此,我们可以使用默认值来指示复制的“one-past-the-end”约定。
这就是我的理解:istream_iterator 是一个模板类,而 istream_iterator<int> 是模板的一个实例。编写 istream_iterator< int>() 会触发 istream_iterator< int> 对象的值初始化,这意味着零初始化 + 调用隐式默认构造函数 ( http://en.cppreference.com/w/cpp/language/value_initialization )。我认为 istream_iterator< int> 对象的默认初始化也可以正常工作(触发对默认构造函数的调用),所以我尝试了这个:
vector<int> v; // read ints from the standard input and append them to v copy(istream_iterator<int>(cin), istream_iterator<int>, back_inserter(v));
但这不会编译:
错误:“,”标记之前的预期主表达式
我不明白发生了什么事。欢迎任何解释。