1

以这段代码为例

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

1 回答 1

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>
于 2012-10-22T13:22:30.033 回答