c++ - 我应该预先分配 std::stringstream 吗?

标签 c++ stl stringstream

我广泛使用 std::stringstream 在我的应用程序中构造字符串和错误消息。 stringstreams 通常是生命周期很短的自动变量。

这样的使用会导致每个变量的堆重新分配吗?我应该从临时变量切换到类成员 stringstream 变量吗?

在后一种情况下,如何保留 stringstream 缓冲区? (我应该用足够大的字符串初始化它还是有更优雅的方法?)

最佳答案

您是否分析过您的执行情况,并发现它们是导致减速的原因?

考虑它们的用法。它们主要用于代码正常流程之外的错误消息吗?

至于预留空间...

某些实现可能会在对字符串流进行任何分配之前保留一个小缓冲区。 std::string 的许多实现都是这样做的。

另一个选项可能是(未经测试!)

std::string str;
str.reserve(50);
std::stringstream sstr(str);

您可能会在此 gamedev thread 中找到更多想法.

编辑:

玩弄stringstream's rdbuf也可能是一个解决方案。这种方法可能很容易出错,所以请be sure it's absolutely necessary .绝对不优雅或简洁。

关于c++ - 我应该预先分配 std::stringstream 吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/1941064/

相关文章:

c++ - Linux 上 STL 的安全版本

c++ - 字符串流问题

c++ - 在 Visual C++ 2010 中构建 Tesseract

c++ - Boost Process `system` 函数中的错误处理

c++ - 添加 long 值显示不同的 o/p

c++ - 如何在 std::map 中使用结构?

c++ - 什么是 iota_n 的良好实现(STL 中缺少算法)

c++ - 将 Mat 从 C++ dll 返回到 VB.Net

c++ - 使用 openmode ios_base::out 的 istringstream 有什么意义

c++ - 使用具有实时性能要求的 c++ STL stringstream 进行日志记录