なぜgcc 4.6にSTLヘッダーを含める必要はありませんか?

私はgcc 4.6をC ++ 0xモードで使っています。私は、ベクトルや他のSTLコンテナを使用しても、関連するヘッダファイルを含まないと、コンパイルエラーが発生しないようです。これは設計によるものでしたか?好ましい方法は何ですか?

私はいつも明示的にstd名前空間を指定しています...しかし、私はいつも、名前空間が指定されていてもヘッダをインクルードしなければならないと考えました。

コンパイラの助けを借りずに100%の時間を得ることが疑わしいので、ヘッダーを含めることが望ましい場合、これは奇妙なデフォルトのようです。

2
そうですが、コードを適切に保守するのが望ましい方法は何ですか? STLヘッダーを他のヘッダーに含めることを避けることは必ずしも可能ではありません(インライン関数など)
追加された 著者 daj,
あなたのプログラムが含んでいるヘッダーをチェックしてください、STLヘッダーはそれらのヘッダーの1つに含まれなければなりません。
追加された 著者 Alok Save,
おそらく、他のヘッダーを介して間接的にそれらを含めることになります。
追加された 著者 Alexandre C.,

2 答え

コードに必要なすべての標準ヘッダーを常に含める必要があります。

残念なことに、標準ヘッダーには他の標準ヘッダーを含めることができます。その場合、正しいヘッダーを含めずに何かを使用することができます。それに頼ることはできません。異なるライブラリ実装に変更した場合、インクルードを修正する必要があるかもしれません。

あなたが正しいことを常に得るための簡単な方法はありません。最も簡単なオプションは、興味のあるすべてのライブラリ実装でコードがコンパイルされているかどうかをテストすることです。

3
追加された

GCC ( g ++ )に与えられた -H オプションは、それが含まれるすべてのヘッダをGCCに出力します。ファイルがどのように含まれているか(つまり、他のヘッダーから)を見つけるのに役立ちます。そして私はGCCが魔法のようにいくつかのstdc ++ヘッダーを含んでいるとは思わない。

3
追加された