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

C++ 为什么连续的istream_iter对象会增加迭代流?,c++,stringstream,istream-iterator,C++,Stringstream,Istream Iterator,为什么以下代码输出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>

为什么以下代码输出
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;
}
这有点像每个连续的
istream\u迭代器
实例都在隐式地迭代
stringstream
的“内部内容”。为什么每个
istream\u迭代器
实例不从其
istream\u类型的开头开始?

是的,执行读取,并且
i
j
k
使用相同的流,因此它们是交互的

(强调矿山)

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


哦…从流中读取会自动“递增”到流中的下一个“元素”,对吗?@StoneThrow是的,因此如果再次执行读取,您将获得下一个值,这是预期的行为。和
i
j
k
使用相同的流,因此它们是交互式的。
$ 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