C++/sstream
< C++
sstream頭文件主要定義了基於std::string類的流輸入輸出。
注意,strstream頭文件及其定義的std::strstream被C++11宣布為過時,被C++17正式廢除(不再支持)。std::strstream使用一個字符數組初始化時,就以該數組為工作區。相反,std::stringstream使用一個字符數組初始化時,會申請分配自己的工作區(std::string)並把初始化數組「深拷貝」到工作區。廢除std::strstream的理由:
- . std::strstream返回一個很難管理的 char *,因為沒有說明它是如何分配的。因此,不可能知道是否應該釋放它所占的內存或對其調用 free() 或對它做任何其他事情。釋放它的唯一真正令人滿意的方法是通過 freeze() 函數將其交還給 strstream。 這一點不夠明顯,以至於很多人都弄錯了。 std::stringstream 返回一個自我管理的字符串對象,這更不容易出錯。
- 必須使用std::ends來終止字符串。
類模板
編輯- basic_stringbuf: 繼承自basic_streambuf
- str : 獲取、設置字符串緩衝區的內容。獲取時返回的是一個臨時對象。
- operator =(移動語義) : 移動語義的賦值運算符。
- swap : 交換兩個對象內容。
- rdbuf : 返回內部的basic_stringbuf對象指針。
- basic_istringstream
- basic_ostringstream
- 構造函數:如果帶一個std::string參數,則使用參數的內容作為被構造的對象的初始內容。
- basic_stringstream
類型
編輯- istringstream
- ostringstream
- stringstream
- stringbuf
- wistringstream
- wostringstream
- wstringstream
- wstringbuf
函數
編輯類型定義
編輯- typedef basic_istringstream< char > istringstream;
- typedef basic_ostringstream< char > ostringstream;
- typedef basic_stringstream< char > stringstream;
- typedef basic_stringbuf< char > stringbuf;
- typedef basic_istringstream< wchar_t > wistringstream;
- typedef basic_ostringstream< wchar_t > wostringstream;
- typedef basic_stringstream< wchar_t > wstringstream;
- typedef basic_stringbuf< wchar_t > wstringbuf;
實踐
編輯重複使用同一個ostringstream對象時,建議:
- 調用clear()清除當前錯誤控制狀態,其原型為 void clear (iostate state=goodbit); 標誌位一共有4種, goodbit, eofbit, failbit, badbit, clear()可以清除掉所有的error state
- 調用str("")將緩衝區清零,清除髒數據