2009-09-30 15 views
19

関数定義内で定義されたC++名前空間エイリアスには、ブロック、関数、ファイル、または他の有効範囲(有効期間)がありますか?C++の名前空間エイリアスの範囲は何ですか?

+0

「[namespace]を使用していますか? ? –

+0

より簡単に使用される識別子の長い名前空間名のエイリアシングを意味するようです。http://msdn.microsoft.com/en-us/library/chwe1tc8.aspx – Twisol

+4

名前空間エイリアス(および宣言を使用)にはC++の他の宣言と同じスコープ規則。 –

答えて

20

ブロックの有効期間です。例:名前空間エイリアスを以下のように定義すると、名前空間エイリアスabcは{...}ブロック外では無効になります。

 

{ 
    namespace abc = xyz; 
    abc::test t; //valid 
} 
    abc::test t; //invalid 
 
+0

ただし、クラススコープでは機能しません。 –

0

関数内でブロック内にエイリアスを宣言しない限り、関数スコープと同じになる可能性があります。

0

名前空間エイリアスは、他のほとんどの種類の識別子と同様に、名前空間エイリアスが作成されたブロック内にスコープしか持たないことはかなり確信しています。私は現時点で確かに確認することはできませんが、this pageはそれに反していないようです。

0

私が知る限り、それは宣言されている範囲にあります。だから、メソッドのエイリアスであれば、そのメソッドでは有効ですが、別のメソッドでは有効ではありません。

1

スコープは、エイリアスが定義されている宣言的な領域です。

0

を見てみましょう。

http://en.cppreference.com/w/cpp/language/namespace_aliasをご覧ください。私はcppreferenceの説明を信頼します。これははるかに標準的です。

+0

リンクを提供しないでください。また、参照しているページから少なくとも部分的な抜粋を追加してください。 – Matthias

関連する問題