std::ends()和freeze(false)的使用

use of std::ends() and freeze(false)

本文关键字:false ends std freeze      更新时间:2023-10-16

我正在查看一些遗留代码,并且有相当多的stringstream使用情况。到目前为止,代码通常从各种类型生成消息。除了在某些情况下它正在做以下事情之外:

   std::ostringstream f1;
   f1 << sDirectory << mFileName << sFileExtension << '';

和在其他人做(只是说明)

   std::ostringstream f1;
   f1 << sDirectory << mFileName << sFileExtension << std::ends;

我相信这些调用是因为它进一步访问f1.str().c_str()并需要null终止它

这些电话有什么不同吗?我从http://en.cppreference.com/w/cpp/io/manip/endsstd::ends不刷新,不同平台(Linux/Windows/Mac)的std::end是否不同?我应该喜欢一个而不是另一个吗?

除此之外,我读到应该在稍后的作用域中(在使用str()之后)对字符串流上的freeze(false)进行调用,以允许释放缓冲区(http://en.cppreference.com/w/cpp/io/ostrstream/freeze)。再次(可能我误读或误解了),但没有调用freeze(false),所以这是否表明上面的每个流都在泄漏?

注意:仅供参考,这是Visual Studio 2005/Windows 7,但我不知道它是否有任何暴露。

抱歉,如果我是密集的。。。

std::ends被定义为具有以下效果:

在输出序列中插入一个空字符:调用os.put(charT())

charTchar时,它被初始化为具有值0,该值等于字符文字。因此,当charTchar时,这两行代码完全相同。

但是,即使流的字符类型不是char,使用std::ends也能很好地工作。