18

私は、ペアを使用するための特定のヘッダーファイルを含めずに、stlペアを使用してコードを記述することに慣れています。しかし、今日の友人は、ペアを使用するときは常にユーティリティヘッダーを使用する必要があると言っていました。そうしないと、一部のコンパイラで問題が発生します。これが本当かどうか教えてください。そして、ユーティリティヘッダーを使用せずにコードを記述できる場合、ユーティリティヘッダーの使用は何ですか。

4

3 に答える 3

26

ほとんどの場合、プログラムで使用するすべてのクラスにヘッダー ファイルを含める必要があります。そうしないと、一部のヘッダーが目的のクラスを内部で使用するという事実に依存しますが、これは別のコンパイラまたはバージョンで変更される可能性があります。クラスの参照 (たとえば cppreference.com - http://en.cppreference.com/w/cpp/utility/pair ) を読み、含める必要があるヘッダー ファイルを確認する必要があります -std::pair追加する必要がある場合に備えて#include <utility>. たとえば、マニピュレータなどを使用するときにコードiostreamが既にインクルードされ、コンパイルされるという事実に依存することはできません。常に言語仕様を参照し、必要なヘッダーをインクルードする必要があります。iomanipsetw

于 2012-11-25T18:14:57.787 に答える
10

<utility>ポイントは、他のヘッダーをインクルードすることで間接的にヘッダーをインクルードした可能性があるということです。通常、ヘッダーが C++ 実装の他のヘッダーによってインクルードされるのは、そのインクルードが標準で義務付けられていない場合です。したがって、 を含めることにより<utility>、コードが標準準拠の実装間で移植可能であることを確認できます (少なくともこの特定の問題に関して)。

標準では が にあると指定されてstd::pairいる<utility>ため、 を使用するときは常にこれを含める必要がありますstd::pair

于 2012-11-25T18:11:47.830 に答える
6

使用するコンポーネントを定義するヘッダーを常に含める必要があります。一部の標準ライブラリは、内部で使用する他の宣言を含めるように実装されますが、これにまったく依存することはできません。標準ライブラリが宣言を利用可能にしているのに、利用可能にする必要がないのは誤りだと思います。

クラス テンプレートstd::pairは によって提供され<utility>ます。

于 2012-11-25T18:16:15.310 に答える