std::stringstream 运算符<<使用 strcat 吗?

Does std::stringstream operator<< use strcat?

本文关键字:lt strcat 使用 std 运算符 stringstream      更新时间:2023-10-16

我刚刚了解了"Schlemiel the painter"算法(http://en.wikipedia.org/wiki/Joel_Spolsky#Schlemiel_the_Painter.27s_algorithm),并意识到我可能就是Schlemiel。

在我的代码中,我用std::stringstreamoperator<<做了很多字符串连接。我很尴尬地得知大量使用c风格的strcat连接具有相当大的效率低下。

c++的std::stringstreamoperator<<使用strcat吗?还是使用更有效的方法?

ostringstream由继承自streambufstringbuf支持;当写入ostringstream时,您正在写入streambuf受控输出序列。根据27.6.2:

2 -每个序列由三个指针表征[…]

  • 起始指针,或数组中的最低元素地址[…]
  • 下一个指针,或下一个元素地址是当前候选的读或写[…]
  • 结束指针,或数组结束后的第一个元素地址[…]

因此,ostringstream有效地对其输出序列的当前端具有常数时间访问。

请注意,无论如何,在输出序列上使用strlen是行不通的,因为c++字符串允许包含嵌入的空字符。

还请注意,直接字符串连接(string::operator+=(const string &))可能比ostream操作符更有效,因为不需要通过虚方法。