私はC++を学び始め、文字列型がコンパイラに直接組み込まれていないため、<string>
ヘッダーファイルを使用する必要があると書いている本を読みました。 <iostream>
を使用すると、文字列型を使用できます。
<string>
ヘッダーを含めた場合、文字列型を使用する場合、<iostream>
ヘッダーを含める必要がありますか?どうして?違いはありますか?
はい、使用するものを含める必要があります。標準ヘッダーが相互に含まれていることは必須ではありません(いくつかの例外IIRCを除く)。今は動作するかもしれませんが、別のコンパイラでは失敗する可能性があります。
あなたの場合、明らかに<iostream>
には<string>
が直接的または間接的に含まれていますが、それに依存しないでください。
<string>
ヘッダーを含めた場合、文字列型を使用する場合、<iostream>
ヘッダーを含める必要がありますか?
はい、あなたはしなければなりません。関連するヘッダー(例:<string>
)が他のヘッダー(例:#include
)を介して間接的に<iostream>
dであることに依存することはできませんが、これは一部の実装に当てはまる場合があります。
そして、これが動作しているように見える場合でも、一部の演算子の関連するオーバーロードのすべてがインポートされていない場合、またはクラスがインポートされている場合は、問題が発生する可能性がありますヘッダーで#include
を転送宣言しますが、他のクラスから派生したそのクラスに関する情報は、#include
dを取得しないヘッダーにのみ含まれます。
このような状況の例については、たとえば StackOverflowに関するこのQ&A を参照してください。