2009-09-30 14 views
19

¿Un alias de espacio de nombres de C++ definido dentro de una definición de función tiene un bloque, función, archivo u otro ámbito (duración de validez)?¿Cuál es el alcance de un alias de espacio de nombres en C++?

+0

¿Quiere decir "using [namespace];" ? –

+0

Parece que se refiere al alias de un nombre de espacio de nombres más largo al de un identificador de uso más fácil: http://msdn.microsoft.com/en-us/library/chwe1tc8.aspx – Twisol

+4

alias de espacio de nombres (y usar declaraciones) tienen las mismas reglas de alcance que otras declaraciones en C++. –

Respuesta

20

Es una duración de bloque de validez. Por ejemplo, si define un alias de espacio de nombre como se muestra a continuación, el alias de espacio de nombres abc no sería válido fuera del bloque {...}.

 

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

excepto que no funciona en el alcance de la clase. –

0

Tendría el alcance del bloque en el que se definió, es probable que sea el mismo que el alcance de la función a menos que declare el alias dentro de un bloque dentro de una función.

0

Estoy bastante seguro de que un alias de espacio de nombres solo tiene alcance dentro del bloque en el que está creado, como la mayoría de otros tipos de identificadores. No puedo verificar con seguridad en este momento, pero this page no parece ir en contra.

0

Por lo que yo sé, está en el alcance que ha declarado. Entonces, si alias en un método, entonces es válido en ese método, pero no en otro.

1

El ámbito es la región declarativa en la que se define el alias.

0

Es válido para la duración del ámbito en el que se introduce.

Eche un vistazo a http://en.cppreference.com/w/cpp/language/namespace_alias, confío en la explicación de cppreference, es mucho más estándar.

+0

Por favor, no proporcione solo un enlace. También agregue al menos un extracto parcial de la página a la que hace referencia. – Matthias

Cuestiones relacionadas