Пространства имен (C++)
Язык C++ предоставляет одно глобальное пространство имен.Это может привести к проблемам с глобальной столкновениями имени.Например, рассмотрим эти 2 файла заголовка C++:
char func(char);
class String { ... };
// somelib.h
class String { ... };
С этими определениями, невозможно использовать оба файла заголовков в одной программе. String классы столкнутся.
Пространство имен декларативная область, вложение дополнительный идентификатор к любым именам объявлены внутри него.Дополнительный идентификатор делает его меньше вероятность того, что имя будет конфликтовать с именами, объявленные в другом месте в программе.Можно использовать одно и то же имя в разных пространствах имен без конфликта, даже если имена отображаются в одну и ту же единицу.При условии, что они отображаются в отдельном пространстве имен, каждое имя будет уникальным, из-за добавления идентификатора пространства имен.Примеры.
namespace one {
char func(char);
class String { ... };
}
// somelib.h
namespace SomeLib {
class String { ... };
}
Теперь имена классов не столкнутся, поскольку они становят one::String и SomeLib::Stringсоответственно.
C++ не позволяет использовать составные имена пространств имен.
// pluslang_namespace.cpp
// compile with: /c
// OK
namespace a {
namespace b {
int i;
}
}
// not allowed
namespace c::d { // C2653
int i;
}
Объявления в области файла единицы измерения смещения вне любых пространств имен, все еще являются членами глобального пространства имен.