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

And*_*uel 32 c++ string stringstream

我知道其中一个优点std::stringstreamstd::istream它可以接受来自任何类型的输入,这些类型定义operator<<std::istream基元类型,也来自基元类型.

我不打算用operator<<; 相反,我只是要连接许多字符串.实现是否std::stringstreamstd::string连接多个字符串更快?

Nic*_*las 39

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

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

即使它比std::string附加函数更快,你仍然需要将字符串复制出去stringstream用它做一些事情.所以这是另一个分配+副本,你不需要它std::string.虽然至少C++ 20看起来可以消除这种特殊需求.

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

  • 请添加一些基准来支持您的答案。 (6认同)