我正在查看一些遗留代码,并且有相当多的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())
。
当charT
是char
时,它被初始化为具有值0,该值等于字符文字