<< s.str() 和 << s.rdbuf() 之间的区别

difference between << s.str() and << s.rdbuf()

本文关键字:lt 区别 之间 rdbuf str      更新时间:2023-10-16

有人能解释中的细微差异吗

ofstream f("test.txt")
std::stringstream s;
s<<"";
f << s.rdbuf();
f.good() // filestream is bad!!

ofstream f("test.txt")
std::stringstream s;
s<<"";
f << s.str();
f.good() // is still ok!

我主要使用.rdbuf()将字符串流推送到文件中(因为它更高效),但如果字符串流为空,文件流就会变差。。。?这不是很愚蠢吗?我想我不太懂<< s.rdbuf()。。。

如果无法从流缓冲区提取任何字符,则"插入"流缓冲区的插入运算符设置故障位-[ostream.inserters]/9:

如果函数不插入字符,则调用setstate(failbit)(可能抛出ios_base:: failure(27.5.5.4))

而输出字符串的插入运算符显然没有考虑写入的字符数量。

这似乎是因为插入streambuffer会将streambuffer"转发"到流中——如果无法提取任何字符,则最肯定的是streambuffer本身存在错误,该错误应通过流错误状态表示。输出一个空流是一个例外,在创建此规则时,可能没有考虑到它的重要性。