Espacios de nombres (C++)
El lenguaje C++ proporciona un único espacio de nombres global.Esto puede causar problemas con conflictos globales de nombre.por ejemplo, considere estos dos archivos de encabezado de C++:
char func(char);
class String { ... };
// somelib.h
class String { ... };
Con estas definiciones, es imposible utilizar ambos archivos de encabezado de un único programa; las clases de String coincidirán.
Un espacio de nombres es una región declarativa que asocia un identificador adicional a cualquier nombre declarado dentro de.El identificador adicional hace menos probable que un nombre estará en conflicto con los nombres declarados en cualquier parte del programa.Es posible utilizar el mismo nombre en espacios de nombres separados sin conflicto aunque los nombres aparecen en la misma unidad de traducción.Cuando aparecen en espacios de nombres independientes, cada nombre será único debido a la adición del identificador del espacio de nombres.Por ejemplo:
namespace one {
char func(char);
class String { ... };
}
// somelib.h
namespace SomeLib {
class String { ... };
}
ahora los nombres de clase no coincidirán porque se convierten en one::String y SomeLib::String, respectivamente.
C++ no permite nombres compuestos para los espacios de nombres.
// pluslang_namespace.cpp
// compile with: /c
// OK
namespace a {
namespace b {
int i;
}
}
// not allowed
namespace c::d { // C2653
int i;
}
Las declaraciones del ámbito de archivo de una unidad de traducción, fuera de todos los espacios de nombres, permanecen miembros del espacio de nombres global.