2008-11-25 38 views
17

estoy trabajando en algo de código escrito por un compañero de trabajo que ya no trabaja con la compañía, y he encontrado el siguiente código: (que he cortado abajo)C++ Espacio de nombres pregunta

namespace NsA { namespace NsB { namespace NsC { 

    namespace { 
     class A { /*etc*/ }; 
     class B { /*etc*/ }; 
    }  

    namespace { 
     class C { /*etc*/ }; 
    } 
} } } 

I no entiendo el propósito de los comandos del espacio de nombres en las líneas 3 y 8.
¿Puede alguien explicar cuál es el propósito de una entrada del espacio de nombres sin nombre?
Gracias

Respuesta

36

Eso es un "espacio de nombres anónimo" - que crea un nombre de espacio de nombres oculto que se garantiza que es único por "unidad de traducción" (es decir, por archivo CPP).

Esto significa efectivamente que todos los elementos dentro de ese espacio de nombres están ocultos desde fuera de esa unidad de compilación. Solo pueden usarse en ese mismo archivo. Consulte también this article en espacios de nombres sin nombre.

+0

Interesante. No sabía que pudieras hacer eso. Tendré que tenerlo en cuenta. – Herms

+0

También obstruye la necesidad de variables "estáticas" (visibilidad de la unidad de compilación) – xtofl

+1

estática todavía es útil ocasionalmente. hará que los nombres no tengan enlaces externos, mientras que los espacios de nombres anónimos cambiarán el nombre de los enlaces. –

Cuestiones relacionadas