1

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

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

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

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

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

这些电话有什么区别吗?我从http://en.cppreference.com/w/cpp/io/manip/ends看到 std::ends 不刷新,std::ends 在不同平台(Linux/Windows/Mac)上是否不同?我应该更喜欢一个吗?

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

NB FYI 这是 Visual Studio 2005/Windows 7,但我不知道这是否有任何裸露。

抱歉,如果我很密集...

4

1 回答 1

1

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

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

charTis时char,它的值被初始化为值为 0,相当于字符字面量\0。因此,通常是什么时候charTchar两行代码完全相同。

但是,std::ends即使流的字符类型不是 , using 也能正常工作char

于 2013-02-06T15:58:39.303 回答