如何清除stringstream?

stringstream parser; parser << 5; short top = 0; parser >> top; parser.str(""); //HERE I'M RESETTING parser parser << 6; //DOESN'T PUT 6 INTO parser short bottom = 0; parser >> bottom; 

为什么不起作用?

通常要“重置”一个stringstream,您需要将基础序列重置为带有str的空string,并使用清除来清除任何失败和eof标志。

 parser.str( std::string() ); parser.clear(); 

通常发生的事情是,第一个>>到达string的末尾,并设置eof位,虽然它成功parsing了第一个短。 在此之后的stream上的操作立即失败,因为stream的eof位仍然被设置。