|  | Home | Libraries | People | FAQ | More | 
Copyright © 2000-2005 Kevlin Henney
Copyright © 2006-2010 Alexander Nasonov
Copyright © 2011-2019 Antony Polukhin
Distributed under the Boost Software License, Version 1.0. (See accompanying file LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt)
Table of Contents
      Sometimes a value must be converted to a literal text form, such as an int represented as a std::string,
      or vice-versa, when a std::string is interpreted as an int. Such examples are common when converting
      between data types internal to a program and representation external to a program,
      such as windows and configuration files.
    
The standard C and C++ libraries offer a number of facilities for performing such conversions. However, they vary with their ease of use, extensibility, and safety.
      For instance, there are a number of limitations with the family of standard
      C functions typified by atoi:
    
sprintf
          function, or the loss of portability associated with non-standard functions
          such as itoa.
        int, long, and double.
        
      The standard C functions typified by strtol
      have the same basic limitations, but offer finer control over the conversion
      process. However, for the common case such control is often either not required
      or not used. The scanf family
      of functions offer even greater control, but also lack safety and ease of use.
    
      The standard C++ library offers stringstream
      for the kind of in-core formatting being discussed. It offers a great deal
      of control over the formatting and conversion of I/O to and from arbitrary
      types through text. However, for simple conversions direct use of stringstream can be either clumsy (with the
      introduction of extra local variables and the loss of infix-expression convenience)
      or obscure (where stringstream
      objects are created as temporary objects in an expression). Facets provide
      a comprehensive concept and facility for controlling textual representation,
      but their perceived complexity and high entry level requires an extreme degree
      of involvement for simple conversions, and excludes all but a few programmers.
    
      The lexical_cast function template
      offers a convenient and consistent form for supporting common conversions to
      and from arbitrary types when they are represented as text. The simplification
      it offers is in expression-level convenience for such conversions. For more
      involved conversions, such as where precision or formatting need tighter control
      than is offered by the default behavior of lexical_cast,
      the conventional std::stringstream approach is recommended. Where
      the conversions are numeric to numeric, boost::numeric_cast
      may offer more reasonable behavior than lexical_cast.
    
      For a good discussion of the options and issues involved in string-based formatting,
      including comparison of stringstream,
      lexical_cast, and others, see
      Herb Sutter's article, The
      String Formatters of Manor Farm. Also, take a look at the Performance
      section.
    
| Last revised: April 09, 2019 at 19:42:32 GMT |