私は、ペアを使用するための特定のヘッダーファイルを含めずに、stlペアを使用してコードを記述することに慣れています。しかし、今日の友人は、ペアを使用するときは常にユーティリティヘッダーを使用する必要があると言っていました。そうしないと、一部のコンパイラで問題が発生します。これが本当かどうか教えてください。そして、ユーティリティヘッダーを使用せずにコードを記述できる場合、ユーティリティヘッダーの使用は何ですか。
3 に答える
ほとんどの場合、プログラムで使用するすべてのクラスにヘッダー ファイルを含める必要があります。そうしないと、一部のヘッダーが目的のクラスを内部で使用するという事実に依存しますが、これは別のコンパイラまたはバージョンで変更される可能性があります。クラスの参照 (たとえば cppreference.com - http://en.cppreference.com/w/cpp/utility/pair ) を読み、含める必要があるヘッダー ファイルを確認する必要があります -std::pair
追加する必要がある場合に備えて#include <utility>
. たとえば、マニピュレータなどを使用するときにコードiostream
が既にインクルードされ、コンパイルされるという事実に依存することはできません。常に言語仕様を参照し、必要なヘッダーをインクルードする必要があります。iomanip
setw
<utility>
ポイントは、他のヘッダーをインクルードすることで間接的にヘッダーをインクルードした可能性があるということです。通常、ヘッダーが C++ 実装の他のヘッダーによってインクルードされるのは、そのインクルードが標準で義務付けられていない場合です。したがって、 を含めることにより<utility>
、コードが標準準拠の実装間で移植可能であることを確認できます (少なくともこの特定の問題に関して)。
標準では が にあると指定されてstd::pair
いる<utility>
ため、 を使用するときは常にこれを含める必要がありますstd::pair
。
使用するコンポーネントを定義するヘッダーを常に含める必要があります。一部の標準ライブラリは、内部で使用する他の宣言を含めるように実装されますが、これにまったく依存することはできません。標準ライブラリが宣言を利用可能にしているのに、利用可能にする必要がないのは誤りだと思います。
クラス テンプレートstd::pair
は によって提供され<utility>
ます。