ostringstream和结束

mar*_*h44 2 c++ string stream

我一直在和其他人的代码一起工作,并注意到在ostringsteam的所有用途中,他们都习惯于明确追加std::ends.

这是我从未做过的事情,从未遇到过问题.

它似乎没有,但应该std::ends在以下代码中有任何区别?

ostringstream message;
message << "Hello world, version " << 2 /* << std::ends ??? */;
printf( "%s\n", message.str().c_str() );
Run Code Online (Sandbox Code Playgroud)

Kon*_*lph 10

附加std::ends是无稽之谈,因为这里stringstreamc_str返回空值终止char*.同样是没有的情况下(废弃)strstreams其中附加std::ends是必要的.我相信作者根本不知道这种改变的行为.

  • 尽管上述链接的末端是有用的,但它们可能是危险的,因为在没有预期的情况下放入"额外"字符.我的同事想知道为什么他的stringstream构造的字符串与数据库中的字符串不完全相同,这是因为它有一个嵌入的\ 0字符. (2认同)