为什么连续的istream_iter对象增加迭代流?

问题描述 投票:1回答:1

为什么以下代码输出c

// main.cpp
#include <iostream>
#include <sstream>
#include <iterator>

int main( int argc, char* argv[] )
{
  std::string p( "abcdefghijklmnopqrstuvwxyz" );
  std::stringstream ss(p);
  std::istream_iterator<char> i( ss );
  std::istream_iterator<char> j( ss );
  std::istream_iterator<char> k( ss );
  std::cout << *k << std::endl;

  return 0;
}

$ g++ --version
g++ (GCC) 9.2.1 20190827 (Red Hat 9.2.1-1)
Copyright (C) 2019 Free Software Foundation, Inc.
This is free software; see the source for copying conditions.  There is NO
warranty; not even for MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.

$ g++ -g ./main.cpp && ./a.out
c

有点像每个连续的istream_iterator实例都隐式地对stringstream进行内部“迭代”。为什么每个istream_iterator实例都不从其istream_type的开头开始?

c++ stringstream istream-iterator
1个回答
2
投票

是,constructor of istream_iterator执行读取,istream_iteratorij使用相同的流,因此它们是交互式的。

(重点是我的)

3)初始化迭代器,将流的地址存储在数据中成员,并且执行从输入流到初始化缓存的值数据成员

© www.soinside.com 2019 - 2024. All rights reserved.