Пространства имён и организация кода
Зачем нужны пространства имён
Пространства имён группируют связанные имена и помогают избежать конфликтов:
namespace game { int GetVersion() { return 1; }}int version = game::GetVersion();Оператор :: называется оператором разрешения области видимости.
Вложенные пространства имён
namespace engine::render { void Draw();}Такая запись доступна начиная с C++17. До этого вложенные пространства имён записывались через несколько блоков namespace.
using
Можно импортировать конкретное имя:
using std::string;Директива using namespace std; делает имена пространства std доступными без префикса и может вызывать конфликты. Особенно избегай её в заголовочных файлах, которые включаются многими единицами трансляции.
Псевдонимы
using PlayerId = unsigned long long;namespace gfx = engine::render;using создаёт псевдоним типа или пространства имён. Для шаблонных псевдонимов он удобнее старого typedef.
Анонимное пространство имён
В .cpp анонимное пространство имён можно использовать для имён с внутренним связыванием:
namespace { int InternalHelper() { return 42; }}Такой помощник не экспортируется как обычное внешнее имя из этой единицы трансляции.
Итог
Давай связанным именам собственное пространство, предпочитай точечный using глобальному импорту и не помещай using namespace std; в заголовки.
