使用rdbuf复制流在空输入时失败

Copy streams using rdbuf fails on empty input

本文关键字:输入 失败 rdbuf 复制 使用      更新时间:2023-10-16

使用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:

如果没有插入字符,则执行设置状态(故障位)

我同意这有点于事无补。