What's the difference between std::to_string, boost::to_string, and boost::lexical_cast?

后端 未结 3 1853
半阙折子戏
半阙折子戏 2021-02-12 10:41

What\'s the purpose of boost::to_string (found in boost/exception/to_string.hpp) and how does it differ from boost::lexical_cast

3条回答
  •  走了就别回头了
    2021-02-12 11:33

    std::to_string, available since C++11, works on fundamental numeric types specifically. It also has a std::to_wstring variant.

    It is designed to produce the same results that sprintf would.

    You may choose this form to avoid dependencies on external libraries/headers.


    The throw-on-failure function boost::lexical_cast and its non-throwing cousin boost::conversion::try_lexical_convert work on any type that can be inserted into a std::ostream, including types from other libraries or your own code.

    Optimized specializations exist for common types, with the generic form resembling:

    template< typename OutType, typename InType >
    OutType lexical_cast( const InType & input ) 
    {
        // Insert parameter to an iostream
        std::stringstream temp_stream;
        temp_stream << input;
    
        // Extract output type from the same iostream
        OutType output;
        temp_stream >> output;
        return output;
    }
    

    You may choose this form to leverage greater flexibility of input types in generic functions, or to produce a std::string from a type that you know isn't a fundamental numeric type.


    boost::to_string isn't directly documented, and seems to be for internal use primarily. Its functionality behaves like lexical_cast, not std::to_string.

提交回复
热议问题