有人可以解释其中的细微差别:
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()
......
答案 0 :(得分:5)
插入&#34;插入&#34;如果没有可以从streambuffer中提取字符,streambuffers设置failbit - [ostream.inserters] / 9:
如果函数没有插入任何字符,则会调用
setstate(failbit)
(可能会抛出ios_base:: failure
(27.5.5.4))。
而输出字符串的插入操作符显然不会考虑写入的字符数。
这似乎是因为插入一个streambuffer&#34; forwards&#34; streambuffer进入流 - 如果没有字符可以被提取,那么streambuffer本身就会出现错误,这个错误应该由stream错误状态表示。输出空流是一个例外,在创建此规则时,可能认为这个例外不够重要。