在所有使用某种缓冲的示例中,我看到他们使用流而不是字符串。 std::ostringstream 和 << 操作符与使用 string.append 有何不同。哪个更快,哪个使用更少的资源(内存)。
我知道的一个区别是,您可以将不同类型(例如整数)输出到输出流中,而不仅仅是 string::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";
但是对于内存使用和速度呢?特别是在大循环中使用时。
更新:
更明确的问题是:我应该使用哪一种,为什么?是否有某些情况下更偏向于其中一种而不是另一种?就性能和内存来说......我认为基准测试是唯一的方法,因为每种实现可能都不同。
更新2:
哦,从答案中我没有得到清晰的想法,究竟应该使用哪一个,这意味着它们中的任何一个都可以完成工作,加上vector。 Cubbi
进行了良好的基准测试,并添加了 Dietmar Kühl,最大的区别在于这些对象的构造。如果您正在寻找答案,也应该查看该测试。我会再等待一段时间以获取其他答案(请参见上一个更新),如果我没有得到答案,我认为我会接受 Tolga 的答案,因为他建议使用的向量已经被采用过了,这意味着向量应该是占用资源较少的。