std::stringstream
- чемпион в тяжелом весе.Он принимает во внимание такие вещи, как наполненный потоком языковой стандарт , а его функциональность включает в себя такие вещи, как создание сторожевого объекта на время форматированной операции, чтобы иметь дело с исключениями, связанными спроблемы.Отформатированные операции ввода и вывода в библиотеках C ++ имеют некоторую репутацию для как тяжеловесного и медленного .
std::to_string
менее интенсивно, чем std::istringstream
, но все равно возвращает std::string
,чья конструкция, вероятно, предполагает динамическое распределение (менее вероятно при современных методах оптимизации коротких строк, но все же вероятно).И в большинстве случаев компилятору по-прежнему необходимо генерировать все словоблудия на сайте вызова для поддержки объекта std::string
, включая его деструктор.
std::to_chars
разработаны так, чтобы иметь как можно меньшую площадь,Вы предоставляете буфер, и std::to_chars
делает очень мало, кроме фактического форматирования числового значения в буфере в определенном формате, без каких-либо специфических для локали соображений, с единственными дополнительными затратами на то, чтобы убедиться, что буфер достаточно большой.Код, использующий std::to_chars
, не требует динамического выделения.
std::to_chars
также немного более гибок с точки зрения параметров форматирования, особенно со значениями с плавающей запятой.std::to_string
не имеет опций форматирования.
std::from_chars
, аналогично, облегченный синтаксический анализатор, который не требует динамического распределения и не должен жертвовать электронами для решения локальных проблем, илинакладные расходы на потоковые операции.