Вероятно, наиболее распространенный простой способ - это, по сути, ваш второй выбор в шаблон с именем lexical_cast
, например, в Boost , поэтому ваш код выглядит следующим образом:
int a = 10;
string s = lexical_cast<string>(a);
Одним из достоинств этого является то, что он поддерживает и другие приведения (например, в противоположном направлении работает так же хорошо).
Также обратите внимание, что хотя Boost lexical_cast начинался как просто запись в поток строк, а затем извлечение обратноиз потока теперь есть несколько дополнений.Прежде всего, были добавлены специализации для нескольких типов, поэтому для многих распространенных типов это значительно быстрее, чем использование stringstream.Во-вторых, теперь он проверяет результат, поэтому (например), если вы преобразуете строку в int
, она может выдать исключение, если строка содержит что-то, что не может быть преобразовано в int
(например, 1234
выполнится успешно, но 123abc
выдаст).
Начиная с C ++ 11, функция std::to_string
перегружена для целочисленных типов, поэтому вы можете использовать такой код:
int a = 20;
std::string s = to_string(a);
Стандарт определяет их как эквивалентные выполнению преобразования с sprintf
(с использованием спецификатора преобразования, который соответствует предоставленному типу объекта, например %d
для int
), в буфер достаточного размера, затемсоздание std::string
содержимого этого буфера.