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 に答える