この 2 つのライブラリの違いをインターネットで検索すると、誰も<iostream>
が C++ の標準 I/O ライブラリであり、C 用であると<cstdio>
言っています。クラッシュ。彼はまた、 はよりもほぼ 3 倍高速な入力と出力を提供すると述べています。しかし、私はその方が便利で、私の教授が正しいかどうかもわかりません。cin>>
cout<<
cin>>
stdio
iostream
iostream
それで、あなたは私に何を使うようにアドバイスしますか?
を使用しiostream
ても、プログラムがクラッシュすることはありません。遅くなる可能性がありますが、それは と相互運用しようとしているからstdio
です。この同期はオフにすることができます1。iostream
入力を取得する慣用的な C++ の方法であり、C++ を使用するstdio
場合、ほとんどの場合、関数よりも使用することをお勧めします。
1使用std::ios::sync_with_stdio(false);
C++ ではストリームを使用し、C では stdio.h を使用します。はい、ストリームは少し遅くなりますが、これらのミリ秒はカウントされますか? ユーザー入力がアプリケーションのボトルネックになることはめったにありません。
また、ストリームが適切に使用され、コンパイラ/ランタイム ライブラリが正常であれば、アプリケーションはクラッシュしません。
ただし、関数を使用する十分な説明可能な理由がある場合cstdio
は、C++ でも関数を使用することは完全に正当です。
I/O のパフォーマンスが本当に重要でない限り、プログラムを最も明確にする (最も読みやすい) ものを使用してください。
私が書いた膨大な数のプログラムの中で、「I/O の速さ」に対して特別な処理が必要なプログラムはごくわずかです。std::stream
関数に関する問題のほとんどは、入力の実際の解析に関係しています [およびstdio と同期] - たとえば、浮動小数点数を読んでいる場合、[std::stream
可能なすべての形式を受け入れる] の独自のバージョンを作成するのは非常に困難です。
I/O パフォーマンスが本当に重要な場合は、std::stream::read
とを使用std::stream::write
することが解決策になる可能性がありますが、ほとんどの場合、最高のパフォーマンスは、ファイルの内容をファイルシステムから仮想メモリに直接「マップ」する移植性のないインターフェイスをmmap
使用することで得られます。MapViewOfFile
アプリケーション。これにより、データの処理に必要なコピーの量が節約され、少し速くなります。
iostreams ライブラリは、下位レベルの stdio ライブラリよりも遅い可能性があります。Streams は、型変換、ローカリゼーション、例外処理など、より多くの処理を内部で行います。