使用rdbuf
:将流复制到另一个流中是一种众所周知的方法
#include <iostream>
#include <fstream>
int main()
{
std::ifstream in{"/tmp/foo.txt"};
std::cerr << in.rdbuf();
std::cerr << "Donen";
}
然而,当/tmp/foo.txt
为空时,这会中断(=设置坏位)我的cerr
。结果,不显示Donen
。
为什么?使用G++/libstdc++/NGNU Linux和Clang++/libc++/OS X进行观察。
这似乎是定义的行为-参见例如。http://en.cppreference.com/w/cpp/io/basic_ostream/operator_ltlt:
如果没有插入字符,则执行设置状态(故障位)
我同意这有点于事无补。