我已經嘗試了幾件事, ios
std::stringstream m; m.empty(); m.clear();
二者都不起做用。 xcode
這些不會在gnu c ++中丟棄stringstream中的數據 函數
m.str(""); m.str() = ""; m.str(std::string());
如下確實爲我清空了字符串流: spa
m.str().clear();
不管使用哪一種編譯器,這都應該是最可靠的方法: code
m=std::stringstream();
個人2美分: 繼承
這彷佛在xcode和dev-c ++中對我有用,我有一個菜單形式的程序,若是按照用戶的要求迭代執行,它將填充一個stringstream變量,該變量在第一次執行該代碼時就能夠正常工做運行,但不會在用戶下次運行相同的代碼時清除字符串流。 可是下面的兩行代碼最終每次都會在填充字符串變量以前清除stringstream變量。 (2小時的反覆試驗和Google搜索),順便說一句,單獨使用每一行都沒法解決問題。 字符串
//clear the stringstream variable sstm.str(""); sstm.clear(); //fill up the streamstream variable sstm << "crap" << "morecrap";
m.str("");
彷佛有效。 編譯器
對於全部標準庫類型,成員函數empty()
都是查詢,而不是命令,即表示「您是否爲空?」 而不是「請扔掉您的內容」。 string
clear()
成員函數是從ios
繼承的,用於清除流的錯誤狀態,例如,若是文件流的錯誤狀態設置爲eofbit
(文件結束),則調用clear()
將設置錯誤狀態回到goodbit
(無錯誤)。 it
要清除stringstream
的內容,請使用:
m.str("");
是正確的,儘管使用:
m.str(std::string());
從技術上講效率更高,由於能夠避免調用採用const char*
的std::string
構造const char*
。 可是,現在,任何一種編譯器在兩種狀況下都應該可以生成相同的代碼-所以,我將只使用可讀性更高的代碼。