使用rdbuf
:
#include <iostream>
#include <fstream>
int main()
{
std::ifstream in{"/tmp/foo.txt"};
std::cerr << in.rdbuf();
std::cerr << "Done\n";
}
然而,当cerr
为空时,这会打破(=设置坏位)我的/tmp/foo.txt
。因此,不会显示Done\n
。
为什么?用G ++ / libstdc ++ / GNU Linux和Clang ++ / libc ++ / OS X观察。
答案 0 :(得分:3)
这似乎是定义的行为 - 参见例如http://en.cppreference.com/w/cpp/io/basic_ostream/operator_ltlt:
如果未插入任何字符,则执行setstate(failbit)
我同意这有点无益。