3

複数のファイルにまたがる名前空間を定義しています。1 つのファイルの名前空間内で、MyType という型を宣言しました。別のファイルで、まだ名前空間内にある場合、ヘッダー ファイルをインクルードしなくても、その型を確認できるのではないでしょうか? 以下に例を示します。

FILE A
namespace EE
{
    typedef int MyType;
}


FILE B
namespace EE
{
    MyType a = 10;
}

繰り返しますが、私の理解では、名前空間はインクルージョンを整理するのに役立ちました。30 個のファイルが使用するタイプを定義する場合、名前空間を使用している場合は、それらすべてにヘッダーを含める必要はないはずです。そう思ったのです。

4

1 に答える 1

7

名前の衝突の問題に対処するために、名前空間が導入されました。ほとんどそれだけです。1 つのファイルをコンパイルすると、オブジェクト ファイルが生成されます。このオブジェクト ファイルからの情報は、次のファイルをコンパイルするときに、コンパイラの知識を強化していません。typedefこれは、定義をヘッダーの一部として各 C/C++ ファイルに含める必要があることを意味します。また、typedef が名前空間の一部であるかどうかは重要ではありません。

typedef は「1 つの定義規則」の例外であることに注意してください。次のように、1 つの翻訳単位に複数の同一の typedef を含めることができます。

typedef int MyInt;
....
typedef int MyInt;

これにより、構文エラーは発生しません。

エクスポートされたテンプレートの「知識を充実させない」という規則には、例外が 1 つあります。ただし、これはテンプレートにのみ適用され、この機能はコンパイラではサポートされていません。審議の後、それは標準からも削除されました。

于 2012-06-24T19:22:35.600 に答える