Вы профилировали свою казнь и обнаружили, что она является источником замедления?
Рассмотрим их использование. Они в основном для сообщений об ошибках за пределами нормального потока вашего кода?
Что касается резервирования места ...
Некоторые реализации, вероятно, резервируют небольшой буфер, прежде чем произойдет какое-либо выделение для потока строк. Многие реализации std :: string делают это.
Другой вариант может быть (не проверен!)
std::string str;
str.reserve(50);
std::stringstream sstr(str);
Вы можете найти еще несколько идей в этой теме gamedev .
редактирование:
Обход с помощью stringstream rdbuf также может быть решением. Этот подход, вероятно, очень прост, но, пожалуйста, убедитесь, что он абсолютно необходим . Определенно не элегантный или лаконичный.