Welcome to OGeek Q&A Community for programmer and developer-Open, Learning and Share
Welcome To Ask or Share your Answers For Others

Categories

0 votes
289 views
in Technique[技术] by (71.8m points)

c++ - Why does peeking into std::cin through a boost::iostreams::filtering_istream forever blocks?

In the below code, I am wrapping std::cin into a boost::iostreams::filtering_istream. Calling peek() on the resulting object seems to block forever since I don't return from peek() whatever the number of characters that I type (pressing enter every now and then to flush).

#include <iostream>
#include <boost/iostreams/filtering_stream.hpp>

int main()
{
  boost::iostreams::filtering_istream in;
  in.push(std::cin); // tried (in.push(boost::ref(std::cin)))

  if ('a' == std::cin.peek()) std::cout << "ok";
  if ('a' == in.peek()) std::cout << "ok"; // blocks whatever the amount of characters typed, I expected it to behave like the std::cin.

  return 0;
}

I could not find any indication in the documentation that suggests I am not using the library correctly. I tried to wrap std::cin with boost::ref when pushing it to the filtering stream but it did not change the behavior.

I tested the snippet with Visual Studio 2017 (boost 1.75.0 and 1.70.0) and gcc9.3 (boost 1.72.0) and none worked.

Thank you in advance for your help in figuring out what goes wrong.

question from:https://stackoverflow.com/questions/65861450/why-does-peeking-into-stdcin-through-a-boostiostreamsfiltering-istream-for

与恶龙缠斗过久,自身亦成为恶龙;凝视深渊过久,深渊将回以凝视…
Welcome To Ask or Share your Answers For Others

1 Reply

0 votes
by (71.8m points)
Waitting for answers

与恶龙缠斗过久,自身亦成为恶龙;凝视深渊过久,深渊将回以凝视…
OGeek|极客中国-欢迎来到极客的世界,一个免费开放的程序员编程交流平台!开放,进步,分享!让技术改变生活,让极客改变未来! Welcome to OGeek Q&A Community for programmer and developer-Open, Learning and Share
Click Here to Ask a Question

...