mercredi 6 mai 2020

Concatenation of std::string and int leads to a shift. Why?

Today I was surprised when trying to concatenate an std::string with an int. Consider the following MWE:

#include <iostream>
#include <string>

void print(const std::string& text)
{
    std::cout << "The string is: " << text << ".\n";
}

int main()
{
    print("iteration_" + 1);

    return 0;
}

Instead of printing

The string is: iteration_1.

which I would expect, it prints

The string is: teration_.

What exactly is going on in the background? Does the string for some reason get converted into char[] or something of the sort? The documentation of operator+ does not list any with an std::string and int.

And what is the proper way of concatenating an std::string with a number? Do I really have to throw them both into an std::stringstream or convert the number into std::string explicitely with std::to_string()?

Aucun commentaire:

Enregistrer un commentaire