我广泛使用 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/