49

我知道它的优点之一std::stringstreamstd::istream它可以接受来自定义operator<<to的任何类型的输入,也可以接受std::istream来自原始类型的输入。

我不会使用operator<<; 相反,我只是要连接许多字符串。的实现是否std::stringstreamstd::string连接许多字符串更快?

4

1 回答 1

65

没有理由期望std::string' 附加函数比stringstream' 插入函数慢。std::string通常只不过是可能的内存分配/复制加上将数据复制到内存中。stringstream必须处理语言环境等问题,即使是基本write呼叫。

此外,std::string还提供了最小化或消除除第一次内存分配之外的任何内容的方法。如果你有reserve足够的空间,每个插入都只是一个memcpy. 这对于stringstream.

即使它比std::string' 附加函数更快,您仍然必须将字符串从 中复制出来stringstream才能对其进行处理。所以这是另一个分配 + 副本,你不需要std::string. 尽管至少 C++20 看起来可以消除这种特殊需求。

std::stringstream如果您需要格式化,您应该使用,而不仅仅是将一些字符串粘在一起。

于 2013-02-07T00:04:32.223 回答