Во всех примерах, которые используют некоторую буферизацию, я вижу, что они используют поток вместо строки. Как std:: ostringstream и < оператора, отличного от использования string.append. Какой из них быстрее, а какой меньше ресурсов (памяти).
Единственное различие, которое я знаю, заключается в том, что вы можете выводить различные типы в выходной поток (например, целочисленный), а не ограниченные типы, которые принимает строка:: append.
Вот пример:
std::ostringstream os;
os << "Content-Type: " << contentType << ";charset=" << charset << "\r\n";
std::string header = os.str();
против
std::string header("Content-Type: ");
header.append(contentType);
header.append(";charset=");
header.append(charset);
header.append("\r\n");
Очевидно, использование потока короче, но я думаю, что append возвращает ссылку на строку, поэтому ее можно записать следующим образом:
std::string header("Content-Type: ");
header.append(contentType)
.append(";charset=")
.append(charset)
.append("\r\n");
И с выходным потоком вы можете сделать:
std::string content;
...
os << "Content-Length: " << content.length() << "\r\n";
Но как насчет использования памяти и скорости? Особенно при использовании в большой петле.
Update:
Чтобы быть более понятным, вопрос: Какую пользу я должен использовать и почему? Есть ли ситуации, когда кто-то предпочитает или другой? Для производительности и памяти... ну, я думаю, что эталонный тест - единственный способ, поскольку каждая реализация может отличаться.
Обновление 2:
Ну, я не понимаю, что я должен использовать из ответов, что означает, что любой из них выполнит эту работу, плюс вектор. Cubbi
сделал хороший бенчмарк с добавлением Dietmar Kühl, что самая большая разница в конструкции этих объектов. Если вы ищете ответ, вы должны это проверить. Я буду ждать немного больше для других ответов (смотрите предыдущее обновление), и если я не получу один, я думаю, что я соглашусь с ответом Толга, потому что его предложение использовать вектор уже сделано, прежде чем это означает, что вектор должен быть менее ресурсоемким.