How to concatenate a std::string and an int?

前端 未结 23 2356
南方客
南方客 2020-11-22 02:40

I thought this would be really simple but it\'s presenting some difficulties. If I have

std::string name = \"John\";
int age = 21;

How do I

23条回答
  •  攒了一身酷
    2020-11-22 03:38

    In alphabetical order:

    std::string name = "John";
    int age = 21;
    std::string result;
    
    // 1. with Boost
    result = name + boost::lexical_cast(age);
    
    // 2. with C++11
    result = name + std::to_string(age);
    
    // 3. with FastFormat.Format
    fastformat::fmt(result, "{0}{1}", name, age);
    
    // 4. with FastFormat.Write
    fastformat::write(result, name, age);
    
    // 5. with the {fmt} library
    result = fmt::format("{}{}", name, age);
    
    // 6. with IOStreams
    std::stringstream sstm;
    sstm << name << age;
    result = sstm.str();
    
    // 7. with itoa
    char numstr[21]; // enough to hold all numbers up to 64-bits
    result = name + itoa(age, numstr, 10);
    
    // 8. with sprintf
    char numstr[21]; // enough to hold all numbers up to 64-bits
    sprintf(numstr, "%d", age);
    result = name + numstr;
    
    // 9. with STLSoft's integer_to_string
    char numstr[21]; // enough to hold all numbers up to 64-bits
    result = name + stlsoft::integer_to_string(numstr, 21, age);
    
    // 10. with STLSoft's winstl::int_to_string()
    result = name + winstl::int_to_string(age);
    
    // 11. With Poco NumberFormatter
    result = name + Poco::NumberFormatter().format(age);
    
    1. is safe, but slow; requires Boost (header-only); most/all platforms
    2. is safe, requires C++11 (to_string() is already included in #include )
    3. is safe, and fast; requires FastFormat, which must be compiled; most/all platforms
    4. (ditto)
    5. is safe, and fast; requires the {fmt} library, which can either be compiled or used in a header-only mode; most/all platforms
    6. safe, slow, and verbose; requires #include (from standard C++)
    7. is brittle (you must supply a large enough buffer), fast, and verbose; itoa() is a non-standard extension, and not guaranteed to be available for all platforms
    8. is brittle (you must supply a large enough buffer), fast, and verbose; requires nothing (is standard C++); all platforms
    9. is brittle (you must supply a large enough buffer), probably the fastest-possible conversion, verbose; requires STLSoft (header-only); most/all platforms
    10. safe-ish (you don't use more than one int_to_string() call in a single statement), fast; requires STLSoft (header-only); Windows-only
    11. is safe, but slow; requires Poco C++ ; most/all platforms

提交回复
热议问题