2009-08-13 1 views

答えて

15
namespace foo=bar; 

これは名前検索ルールには影響しません。唯一の影響は 'foo'を 'bar'のエイリアスにすることです。例えば:

namespace bar 
{ 
    void b(); 
} 

void f() { 
    bar::b(); // Call 'b' in bar 
    foo::b(); // 'foo' is an alias to 'bar' so calls same function 
} 

次は、ルックアップは、 'I' のために行われると

namespace NS 
{ 
    namespace bar 
    { 
    } 

    namespace foo { 
    using namespace bar; 

    void f() { 
     ++i; 
    } 
    } 
} 

は、 'fooは' を 'NS' し、 'bar' に、最初に検索される検索ルールを変更しません。

+0

非常に遅いコメントに申し訳ありませんが、私は他の人が検索していると考えました。名前空間bar文を使用すると、その時点で定義されているものだけがfoo名前空間に持ち込まれます。要するに、悪い順序の依存関係を作成する可能性があります。 Sutter/AlexandrescuのC++コード標準 –

+0

の#59を参照@RobL:_declaration_を使用すると、その時に宣言された名前のみが取り込まれます。上記は_directive_を使用しています。前者は、名前空間から現在のスコープへの名前の再宣言に似ています。後者は、あなたがここでそれを見つけなければ、この他の名前空間をチェックするならば、言葉を参照するルールのようなものです。 –

2

ネームスペースを別のネームスペースにインポートする場合は、そのネームスペースを同じにする必要があります。しかし、2番目のコードでは他のコードも置くことができるので、でないものをの名前空間fooの一部に入れることもできます。前者はエイリアスを作成するだけです。

+0

名前が名前空間 'foo'に追加された場合、異なるルックアップ規則により、2つの例の間で異なる名前が見つかる可能性があります。 –

関連する問題