C++/sstream

維基教科書,自由的教學讀本
< C++

sstream頭文件主要定義了基於std::string類的流輸入輸出。

注意,strstream頭文件及其定義的std::strstream被C++11宣布為過時,被C++17正式廢除(不再支持)。std::strstream使用一個字符數組初始化時,就以該數組為工作區。相反,std::stringstream使用一個字符數組初始化時,會申請分配自己的工作區(std::string)並把初始化數組「深拷貝」到工作區。廢除std::strstream的理由:

  1. . std::strstream返回一個很難管理的 char *,因為沒有說明它是如何分配的。因此,不可能知道是否應該釋放它所占的內存或對其調用 free() 或對它做任何其他事情。釋放它的唯一真正令人滿意的方法是通過 freeze() 函數將其交還給 strstream。 這一點不夠明顯,以至於很多人都弄錯了。 std::stringstream 返回一個自我管理的字符串對象,這更不容易出錯。
  2. 必須使用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("")將緩衝區清零,清除髒數據