清除Stringstream
以下程式碼嘗試清除名為parser 的stringstream 物件:
<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>
但是,這種方法不能如預期工作。讓我們解釋一下原因。
問題:
問題在於字串流處理檔案結尾 (eof) 和失敗標誌的方式。當第一次提取(>> top)到達字串末尾時,它設定 eof 位元。對流的後續操作會失敗,因為 eof 位元保持設定狀態。
解:
要正確清除字串流,底層序列以及失敗和 eof 標誌都必須被重置。以下程式碼執行此操作:
<code class="cpp">parser.str(std::string()); parser.clear();</code>
str() 方法將底層序列設為空字串,而clear() 方法清除失敗和 eof 標誌。
使用這些變更後,程式碼將正確地將值 6 讀取到解析器流中並將其儲存在底部變數中。
以上是為什麼使用 `str(\'\')` 重置字串流不能清除它?的詳細內容。更多資訊請關注PHP中文網其他相關文章!