c++ 我应该用什么来代替std::ostrstream?

j2datikz  于 2023-05-24  发布在  其他
关注(0)|答案(5)|浏览(216)

我喜欢使用std::ostrstream来格式化文本,但不将其打印到标准输出,而是将其写入std::string(通过访问std::ostrstream::str()成员)。显然,这是 deprecated 现在。那么,我应该如何将格式化的对象写入字符串,并与写入流时一样方便呢?

r6l8ljro

r6l8ljro1#

你可以使用std::ostringstream。类似地,应该使用std::istringstream而不是std::istrstream。您需要为这些类包含<sstream>头。
您还可以看到this question,这解释了为什么strstream被弃用。

fjnneemd

fjnneemd2#

正如其他人已经说过的,std::ostringstream是替代品。
它比std::ostrstream更方便(也更安全),因为它会自动管理所有内存,所以您不需要调用freeze(false)来确保在使用完它时释放内存。

gab6jxml

gab6jxml3#

你应该使用std::stringstream。参见boost::lexical_cast
std::stringstream支持<<>>std::ostringstream仅支持<<std::istringstream仅支持>>。我经常发现能够同时使用这两个操作符很方便。

i7uaboj4

i7uaboj44#

也可以使用boost::format。然后你可以做这样的事情:

int a = 1;
std::string b("foo");
std::string s = boost::str(
    boost::format("some text, some vars=%1%, %2%, %1%") % a % b % a);

那么s将包含"some text, some vars=1, foo, 1"
在我看来,在某些情况下,这比使用运算符<<更方便。
作为参考,我还包括格式规范。

相关问题