2009-09-30 10 views
19

Hat ein C++ - Namespace-Alias, der in einer Funktionsdefinition definiert ist, einen Block, eine Funktion, eine Datei oder einen anderen Bereich (Gültigkeitsdauer)?Was ist der Gültigkeitsbereich eines Namespace-Alias ​​in C++?

+0

Meinst du "mit [Namespace];" ? –

+0

Es sieht so aus, als ob er das Aliasing eines längeren Namespace-Namens zu dem eines leichter zu verwendenden Bezeichners meint: http://msdn.microsoft.com/en-us/library/chwe1tc8.aspx – Twisol

+4

Namespace-Alias ​​(und Deklarationen verwenden) dieselben Scoping-Regeln wie andere Deklarationen in C++. –

Antwort

20

Es ist eine Blockgültigkeitsdauer. ZB Wenn Sie einen Namespace-Alias ​​wie folgt definieren, wäre der Namespace-Alias ​​abc außerhalb des {...} Blocks ungültig.

 

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

außer es funktioniert nicht im Klassenumfang. –

0

Es hätte den Gültigkeitsbereich des Blocks, in dem es definiert wurde - wahrscheinlich identisch mit dem Funktionsumfang, es sei denn, Sie deklarieren den Alias ​​innerhalb eines Blocks innerhalb einer Funktion.

0

Ich bin ziemlich sicher, dass ein Namespace-Alias ​​nur Bereich innerhalb des Blocks hat, in dem es erstellt wird, wie die meisten anderen Arten von Bezeichnern. Ich kann im Moment nicht sicher überprüfen, aber this page scheint nicht dagegen zu sein.

0

Soweit ich weiß, ist es in dem Umfang, der erklärt wird. Wenn Sie also in einer Methode einen Alias ​​verwenden, ist sie in dieser Methode gültig, in einer anderen jedoch nicht.

1

Der Bereich ist der deklarative Bereich, in dem der Alias ​​definiert ist.

0

Es ist für die Dauer des Umfangs gültig, in dem sie eingeführt wird.

Werfen Sie einen Blick auf http://en.cppreference.com/w/cpp/language/namespace_alias, ich vertraue der Erklärung der cppreference, es ist viel mehr Standard.

+0

Bitte geben Sie nicht nur einen Link an. Fügen Sie außerdem mindestens einen Teilauszug von der Seite hinzu, auf die Sie verweisen. – Matthias

Verwandte Themen