25

<string>私は C++ の学習を開始し、文字列型がコンパイラに直接組み込まれていないため、ヘッダー ファイルを使用する必要があると書かれている本を読みました。を使用する<iostream>と、文字列型を使用できます。

<string>ヘッダーを含めた場合、文字列型を使用したい場合、ヘッダーを含める必要があり<iostream>ますか? なんで?何か違いはありますか?

4

2 に答える 2

30

はい、使用するものを含める必要があります。標準ヘッダーに相互に含めることは義務付けられていません (いくつかの例外 IIRC を除く)。現在は機能するかもしれませんが、別のコンパイラでは失敗する可能性があります。

あなたの場合、直接的または間接的に<iostream>含ま<string>れているようですが、それに依存しないでください。

于 2013-05-12T09:50:57.783 に答える
8

<string>ヘッダーを含めた場合、文字列型を使用したい場合、ヘッダーを含める必要があり<iostream>ますか?

はい、そうしなければなりません。<string>関連するヘッダー (例: ) が#include他のヘッダー (例: ) を介して間接的に dされることに依存することはできません<iostream>が、これは一部の実装では当てはまります。

また、これが機能しているように見える場合でも、一部の演算子の関連するオーバーロードのすべてがインポートされていない場合、またはクラスがヘッダーで前方宣言されている場合に問題が発生する可能性がありますが#include、そのクラスに関する情報は他のものから派生していますclass は、 #includedを取得しないヘッダーにのみ含まれています。

たとえば、このような状況の例については、StackOverflow に関するこの Q&A を参照してください。

于 2013-05-12T09:51:05.137 に答える