ここは特に考えて<iostream>
います。ほとんどの C++ プログラムが使用する一般的なライブラリであるため、デフォルトで含まれていないのはなぜですか? 他の例は<string>
、<fstream>
および<cstdlib>
です。
4 に答える
一般的な C++ イディオム:
使用した分だけお支払いいただきます。
これは、「頻繁に」使用される一般的なヘッダーがないためです。
たとえば<iostream>
、ストリーム/コンソールを介して多くの I/O を行うアプリケーションでのみ使用され、それらのアプリケーションがタスクに他のライブラリを使用しない場合にのみ使用されます (コンソールでは ncurses が思い浮かびます)。これらのアプリケーションでは、実際に I/O を実行するモジュールでのみ使用され、ロジック、計算、データベースへの永続性などを実行する他のモジュールでは使用されません。
他の「よく使用される」ヘッダーにも同じパターンの推論が適用されます。ただし、プロジェクトに多くの場所で使用されるヘッダーがある場合は、プリコンパイル済みヘッダーを検索することをお勧めします。しかし、アプリケーションをモジュール化して、あらゆる場所で API ヘッダーを使用したくない場合もあります。
あなたが例として選んだのは皮肉なことです<iostream>
:
C++ 標準ライブラリ第 2 版、p.752
ヘッダー
<iostream>
は、標準ストリーム オブジェクトを使用する場合にのみ含める必要があります。一部の実装では、このヘッダーを含む各翻訳単位の起動時に一部のコードが実行されます。実行されるコードはそれほど高価ではありませんが、実行可能ファイルの対応するページをロードする必要があり、コストがかかる可能性があります。
性能・実行ファイルサイズの都合上、このようなものは含まれておりません。必要な最小限のものを提供することで、実行可能ファイルのサイズを最小限に抑えることができ、まったく使用しないライブラリにリンクすることはありません。
使用しないライブラリを含めると、場合によってはプログラムの読み込み時間が長くなる可能性があります (これは、システムの読み込み戦略に大きく依存します!)。一度ロードされたプログラムのパフォーマンスに関しては、大きな違いはないはずです (もしあったとしても!)。