C++ boost之 conversion/lexical_cast

  •  動 機
     
    有時候,我們必須把一個值轉換成字面上一樣的其它形式,比說把int型的數值轉換成string型字符串,相反把string字 
     符串轉成int型數值也一樣。當程序內部數據類型相互轉換或者程序內部數據類型轉換成非程序內部類型(比如
    windows和配置
     文件),想上述的類型轉換操作是最常見,也是最常用的。
     在標準C/C++庫中,提供和很多關於類型轉換的工具或功能函數。但是,它們缺乏
    易用性,可擴展性,和安全性。
     舉一個例子,在標準C家族中有一個atoi的函數,在使用過程中它就有許多限制:
    1. 單邊轉換:僅從文本類型轉換爲內部數值類型。使用C庫當中的函數進行類型轉換,要麼不方便、要麼沒有像sprintf那樣安全、要麼沒有像其他非標準庫那樣簡單。
    2. 範圍小:其轉換的範圍僅僅是內建數字類型的一個子集(int,long和double類型)。
    3. 拓展性差:它不能擴展成一種特定類型,比如說把一個字符串轉換成複數或有理數。

        C標準庫中還有一個典型的strtol函數,它也有上述限制,不過在轉換過程中提供了更好的控制。但是在一般情況下,
   這樣的控制是不必要的或者很少用到的。scanf家族的功能函數提供的控制甚多,但也缺少安全性和易用性。

  

   現在我們來討論,C++標準庫中提供的一種核心類型格式化的函數stringstream。在類型格式化和在任意類型之間的I/O
   轉換上,它提供了更好 的控制。然而,這麼簡單的轉換就用stringstream顯得太笨重和費解。

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章