2015-04-01 164 views
15

boost::to_string(在boost/exception/to_string.hpp中找到)的作用是什麼?它與boost::lexical_cast<std::string>std::to_string有什麼不同?std :: to_string,boost :: to_string和boost :: lexical_cast <std::string>有什麼區別?

+9

如果我正確記得歷史記錄,'boost :: to_string'在'std :: to_string'之前,就像通常情況一樣。在它被接納到標準庫之前,Boost往往是東西的遊樂場。 'std :: to_string'是C++ 11中新增的。 – CoryKramer 2015-04-01 19:21:43

+0

@Cyber​​:我建議你把它寫成(部分)答案。 – MikeMB 2015-04-01 19:40:00

+0

@CoryKramer,'boost :: to_string'可能會更老,但它不同於'std :: to_string'和'std :: to_string'不是基於它(它們恰好使用相同的名稱)。 – 2017-01-17 13:58:44

回答

21

std::to_string,自C++ 11起可用,專門用於基本數值類型。它也有一個std::to_wstring變種。

其設計產生與std::sprintf相同的結果。

您可以選擇此表單以避免依賴於外部庫/標頭。在


boost::lexical_cast<std::string>作品可以插入std::ostream,包括來自其他庫或你自己的代碼類型的任何類型。

優化專業化常見類型的存在,與通用的形式,類似於:

template< typename OutType, typename InType > 
OutType lexical_cast(const InType & input) 
{ 
    std::stringstream temp_stream; 
    temp_stream << input; 

    OutType output; 
    temp_stream >> output; 
    return output; 
} 

您可以選擇這種形式的利用輸入類型的更大的靈活性泛型函數,或從類型產生std::string你知道不是基本的數字類型。


boost::to_string沒有直接記錄,並似乎是主要內部使用。其功能類似於lexical_cast<std::string>,而不是std::to_string

-2

還有更多的區別:助推器正常工作!請考慮以下代碼:

#include <limits> 
#include <iostream> 

#include "boost/lexical_cast.hpp" 

int main() 
{ 
    double maxDouble = std::numeric_limits<double>::max(); 
    std::string str(std::to_string(maxDouble)); 

    std::cout << "std::to_string(" << maxDouble << ") == " << str << std::endl; 
    std::cout << "boost::lexical_cast<std::string>(" << maxDouble << ") == " 
       << boost::lexical_cast<std::string>(maxDouble) << std::endl; 

    return 0; 
} 

$ ./to_string 
std::to_string(1.79769e+308) == 179769313486231570814527423731704356798070600000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000.000000 
boost::lexical_cast<std::string>(1.79769e+308) == 1.7976931348623157e+308 
+2

請不要只是粘貼一些代碼。描述*你的代碼的作用和*它如何做。 – 2017-01-17 13:38:38

+0

對於相同的double值,to_string()和lexical_cast()的輸出很簡單;-)) – 2017-01-17 15:28:18

+0

這些結果當然不同 - 值得注意。但是,對我而言,哪個結果更「正確」並不明顯。 – 2017-01-17 21:10:15

相關問題