Это интересный случай. Я не уверен, напечатали ли вы результат вашего первого заявления или нет, но если вы это видите, вы видите, что на самом деле вы получаете "STING"
, а не "TESTING2"
, или что-то в этом роде!
Здесь происходит несколько вещей. В своем первом утверждении вы создаете строку, используя строковый литерал . В этом случае C ++ создает const char[N]
и помещает в него вашу строку. Поскольку char[N]
технически является массивом (а массив является указателем), оператор +
действует как приращение, а результат "TESTING" + 2
фактически является указателем на второй элемент "TESTING"
, который является "STING"
. Вы не увидите никаких ошибок, потому что C ++ думает, что вы хотели сделать.
Во втором заявлении вы говорите C ++, что я хочу объект std::string
. std::string
более безопасен и будет раздражать вас, если вы попытаетесь добавить к нему что-то кроме строки. Итак, когда вы делаете, вы получаете ошибку. Чтобы ваше второе утверждение работало как задумано, вы должны написать t + std::to_string(2)
.