我知道std::stringstream
的一个优点是它是std::istream
所以它可以接受来自定义operator<<
到std::istream
的任何类型的输入,也来自原语类型。
我不会使用operator<<
;相反,我只是要连接许多字符串。对于连接多个字符串,std::stringstream
的实现是否比std::string
更快?
答案 0 :(得分:33)
没有理由期望std::string
的附加函数比stringstream
的插入函数慢。 std::string
通常只是可能的内存分配/复制以及将数据复制到内存中。 stringstream
必须处理语言环境等内容,即使是基本的write
来电也是如此。
此外,std::string
提供了最小化或消除除第一次内存分配之外的任何内容的方法。如果reserve
有足够的空间,则每次插入只需memcpy
。 stringstream
无法实现这一点。
即使它比std::string
的附加功能更快,你仍然 从stringstream
复制字符串以对其执行某些操作。这是另一个分配+副本,std::string
不需要它。虽然至少C ++ 20看起来会消除这种特殊需求。
如果您需要格式化,则应使用std::stringstream
,而不仅仅是将某些字符串粘在一起。