4

重複の可能性:
C++ コードで使用している I/O ライブラリはどれですか?

別の質問へのコメントでこの質問をしたところ、代わりに適切な質問にするように求められました。

stdio の代わりに iostream を使用したいのはなぜですか? より具体的には、std::getline は C の同等物よりも何を提供する必要があるのでしょうか?

言語バッシングはやめてください。

4

5 に答える 5

11

主に<<and>>演算子を使用すると、いくつかの利点があります。行を取得することはそれほど違いはありませんが、それを a に読み込むことができることstd::stringはかなりの利点です。

C++ I/O には型安全性があります。パラメータリストを引用符で囲まれた文字列として記述したり、変数などとして記述したりしないでください。一度出力するものを書くと、C++ はパラメーターの数とその型を把握します。型が一致しない場合、CI/O は I/O を間違えたり、保護されたメモリにアクセスしようとしたりする可能性があります。

C++ I/O は簡単に拡張できます。コピーするサンプルがあれば operator<<()、簡単に書くことができます。友達を増やすことはできません。形式タイプの固定リストがあります。operator>>()printf()

C++ I/O は、最初はかなり単純に見えますが、プログラマーがアクセスできる構造がたくさんあるため、優れた C++ プログラマーは、CI/O が対応できないケースをカバーするように変更できます。(これを使いすぎないでください。)

于 2010-11-16T19:22:19.230 に答える
4

最大のメリットは型の安全性です。C のフォーマット文字列には (OCaml や boost::format とは異なり) 型がないため、誤ってかなり厄介なことを行うことができます。

于 2010-11-16T19:14:11.470 に答える
2
  1. 任意の方法で実装できる抽象的な入力/出力/シーク可能なストリームを取得します。

    ファイル、メモリ、文字列、さらにはカスタム フィルターや zlib コンプレッサーなどのストリームから /read に書き込みます。

    一部の C ライブラリは、読み取り/書き込みハンドラー (BSD および Linux) を設定するためのオプションを提供しますが、それでも std::streambuf と同じ能力はなく、これらは標準ではありません。

  2. ストリーム固有のロケールを使用して、任意のロケールに従ってデータをフォーマットし、スレッド固有の方法でストリーミングすることができます。

  3. タイプセーフティ。
  4. ストリーム汎用オブジェクト (複合変数、XML オブジェクトなど) への書き込みと読み取り

もっと?

于 2010-11-16T19:21:25.063 に答える
1

1 つは、iostream を使用すると、配列std::stringではなく で作業できるようになるためchar、心配する必要のあるメモリ管理が大幅に少なくなるということです。

于 2010-11-16T19:12:54.950 に答える
0

C++ を使用している場合は、OOP を使用したいと思うかもしれませんね。cstdio (別名 stdio.h) は、C との互換性のためだけにあると思います。

于 2010-11-16T19:13:50.363 に答える