像myoutput<<这样的iostream语句的语义是什么? myinput.rdbuf()在c ++中?

时间:2012-10-22 12:50:27

标签: c++ stl iostream

以此代码为例

std::ifstream myinput("myinput.txt");
std::ofstream myoutput("myoutout.txt");
myoutput << myinput.rdbuf();
  1. 操作的语义是什么?
  2. C ++版本是运算符的特定重载&lt;&lt;可用吗?
  3. 是否有更明确的方式[通过使用命名函数而不是运算符]来实现相同的效果?
  4. 如何判断在操作中复制的字节数?
  5. 我可以限制复制的字节数吗?
  6. 你能概述一下这个特定的运算符重载&lt;&lt;是实施还是指向已建立的实施?

1 个答案:

答案 0 :(得分:3)

  1. 它将整个输入流(整个文件)复制到输出流。
  2. 它始终以C ++提供。 std :: ifstream在<istream>中定义,std :: ofstream在<ostream>中定义。
  3. 不,这是唯一的方法。
  4. 使用myoutput.tellp()。
  5. 您需要使用std :: ifstream :: read在循环中手动读取流,将数据复制到缓冲区并使用std :: ofstream :: write将数据写入输出流,直到您'我复制了你想要的金额。
  6. 如果安装了C ++编译器,则可以查看其实现(大多数流类都是模板,这意味着它们的实现必须位于标头中)。对于std::basic_ios::rdbuf,您可以查看<ios>,而对于std::ostream::operator<<(std::basic_streambuf*),您可以查看<ostream>