std::string str; std::cout << str.capacity() << std::endl;
Выдаст значение 15. Т.е. в эту строку можно записать 15 байт и реаллокации не будет происходить.
Самое интересное, что эти 15 байт распологаются в стёке а не в куче.
Так что каст std::to_string() очень дешевая операция, если сохраняемое значение не больше 15 байт.
p.s. Это так в stl которая поставляется вместе с gcc 8-10. В других реализациях может быть и по другому.