std :: stringstream vs std :: string用于连接多个字符串

时间:2013-02-06 23:51:43

标签: c++ string stringstream

我知道std::stringstream的一个优点是它是std::istream所以它可以接受来自定义operator<<std::istream的任何类型的输入,也来自原语类型。

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

1 个答案:

答案 0 :(得分:33)

没有理由期望std::string的附加函数比stringstream的插入函数慢。 std::string通常只是可能的内存分配/复制以及将数据复制到内存中。 stringstream必须处理语言环境等内容,即使是基本的write来电也是如此。

此外,std::string提供了最小化或消除除第一次内存分配之外的任何内容的方法。如果reserve有足够的空间,则每次插入只需memcpystringstream无法实现这一点。

即使它比std::string的附加功能更快,你仍然 stringstream复制字符串以对其执行某些操作。这是另一个分配+副本,std::string不需要它。虽然至少C ++ 20看起来会消除这种特殊需求。

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