Gab*_*iel 4 c++ iostream stringstream ofstream cstdio
有人可以解释微妙的区别:
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!
Run Code Online (Sandbox Code Playgroud)
我主要使用.rdbuf()将字符串流推送到文件中(因为它更有效),但是如果字符串流为空而不是文件流变坏...?这不是傻瓜吗?我想我不太明白<< s.rdbuf()......
如果没有可以从streambuffer中提取字符,那么"插入"streambuffers的插入运算符会设置failbit - [ostream.inserters]/9:
如果函数没有插入任何字符,则调用
setstate(failbit)(可能抛出ios_base:: failure(27.5.5.4)).
而输出字符串的插入运算符显然不考虑写入的字符数.
这似乎是因为插入一个streambuffer将streambuffer"转发"到流中 - 如果没有字符可以被提取,那么streambuffer本身就会出现错误,这个错误应该由stream错误状态表示.输出空流是一个例外,在创建此规则时,可能认为这个例外不足以考虑.
| 归档时间: |
|
| 查看次数: |
308 次 |
| 最近记录: |