带有二进制数据的C++ fstream <<和>>运算符

RC.*_*RC. 11 c++ iostream standard-library

我总是阅读并被告知,在处理二进制文件时,应该使用read()和write()而不是<<和>>运算符,因为它们用于格式化数据.我也读过可以使用它们,但它是一个高级主题,我无法找到任何人潜入和讨论的地方.

我最近看到一些代码执行了以下操作:

 std::ifstream file1("x", ios_base::in | ios_base::binary);
 std::ofstream file2("y", ios_base::app | ios_base::binary);

 file1 << file2.rdbuf();

当我指出使用<<运算符和二进制文件时,我被告知rdbuf()调用返回一个streambuf*并且<<重载streambuf*并执行没有格式化的直接复制,因此是安全的.

这是真的还安全吗?效率怎么样?任何陷阱?细节将不胜感激.

谢谢!

APr*_*mer 4

是(参见 27.6.2.5.3/6,其中描述了streambuf 的<< 重载)。

  • 这是标准中的页面还是什么?:) 一个链接就好了! (3认同)
  • 他们是谁”?ISO 和国家机构不是盈利组织。他们从销售标准中获得的钱支付了他们的运营成本,而流行的标准实际上支持不太流行的标准。委员会成员及其雇主已经支持这一进程,他们付出时间、支付会议旅费和住宿费、赞助会议以便提供房间等,并且通常还支付会员费。这种安排并不是真正为 PL 设计的,但 PL 对于这些组织来说是一个非常特殊的领域,例外对他们来说没有意义。 (2认同)