【发布时间】:2016-02-23 02:26:03
【问题描述】:
使用rdbuf 将一个流复制到另一个流中是一种众所周知的方法:
#include <iostream>
#include <fstream>
int main()
{
std::ifstream in{"/tmp/foo.txt"};
std::cerr << in.rdbuf();
std::cerr << "Done\n";
}
但是,当/tmp/foo.txt 为空时,这会破坏(= 设置坏位)我的cerr。因此,Done\n 不会显示。
这是为什么呢?用 G++/libstdc++/GNU Linux 和 Clang++/libc++/OS X 观察。
【问题讨论】: