C++ namespaces

Estas notas se han preparado sobre la base del documento:

C++ Annotations Version 4.4.2
Frank B. Brokken

Concepto

Los espacios de nombres (namespace) de C++ permiten declarar identificadores sin que éstos se solapen, indiscriminadamente, con los declarados en otras zonas de código.

Un namespace se define de la siguiente forma:

namespace nombre_del_namespace
{
... //declaraciones y/o definiciones de variables, funciones, clases, ...
}

aquí nombre_del_namespace (mi_espacio, tu_espacio, std, p.e.) es un identificador estandar C++. Un namespace puede contener, a su vez, declaraciones de namespace anidadas.

No pueden hacerse declaraciones de namespace dentro de bloques (p.e.: dentro de una función).

Se dice que la declaración namespace es una declaración abierta, en el sentido de que pueden aparecer, en un contexto (que puede abarcar varios ficheros), varias declaraciones de un namespace, en cuyo caso se irá incrementando el contenido del namespace.

Cuando en un fichero de código aparezca una declaración namespace sin un identidicador de namespace, las declaraciones que este contenga sólo podrán usarse en ese fichero. A este namespace se le llamaría cerrado, porque no va a ser posible extenderlo en otros ficheros de código.

Aunque la declaración de un namespace puede contener las definiciones de las entidades declaradas en el mismo, esto no tiene porqué ser así; es más, la mayoría de las veces será más aconsejable incluir sólo las declaraciones.