Clearing a Stringstream
The following code attempts to clear a stringstream object named parser:
<code class="cpp">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;</code>
However, this approach doesn't work as expected. Let's explain why.
Problem:
The issue lies in the way stringstreams handle end-of-file (eof) and fail flags. When the first extraction (>> top) reaches the end of the string, it sets the eof bit. Subsequent operations on the stream fail because the eof bit remains set.
Solution:
To correctly clear a stringstream, both the underlying sequence and the fail and eof flags must be reset. The following code does this:
<code class="cpp">parser.str(std::string()); parser.clear();</code>
The str() method sets the underlying sequence to an empty string, while the clear() method clears the fail and eof flags.
With these changes, the code will correctly read the value 6 into the parser stream and store it in the bottom variable.
The above is the detailed content of Why Doesn\'t Resetting a Stringstream with `str(\'\')` Clear It?. For more information, please follow other related articles on the PHP Chinese website!