我喜欢使用std::ostrstream
来格式化文本,但不将其打印到标准输出,而是将其写入std::string
(通过访问std::ostrstream::str()
成员)。显然,这是 deprecated 现在。那么,我应该如何将格式化的对象写入字符串,并与写入流时一样方便呢?
我喜欢使用std::ostrstream
来格式化文本,但不将其打印到标准输出,而是将其写入std::string
(通过访问std::ostrstream::str()
成员)。显然,这是 deprecated 现在。那么,我应该如何将格式化的对象写入字符串,并与写入流时一样方便呢?
5条答案
按热度按时间r6l8ljro1#
你可以使用
std::ostringstream
。类似地,应该使用std::istringstream
而不是std::istrstream
。您需要为这些类包含<sstream>
头。您还可以看到this question,这解释了为什么
strstream
被弃用。fjnneemd2#
正如其他人已经说过的,
std::ostringstream
是替代品。它比
std::ostrstream
更方便(也更安全),因为它会自动管理所有内存,所以您不需要调用freeze(false)
来确保在使用完它时释放内存。gab6jxml3#
你应该使用
std::stringstream
。参见boost::lexical_cast
。std::stringstream
支持<<
和>>
。std::ostringstream
仅支持<<
,std::istringstream
仅支持>>
。我经常发现能够同时使用这两个操作符很方便。i7uaboj44#
也可以使用
boost::format
。然后你可以做这样的事情:那么
s
将包含"some text, some vars=1, foo, 1"
。在我看来,在某些情况下,这比使用运算符
<<
更方便。作为参考,我还包括格式规范。
dzhpxtsq5#
在C++20中,可以使用std::format