# Глава 5.3. Пространства имён
[Пространство имён](https://en.cppreference.com/w/cpp/language/namespace) (namespace) — это область в коде, объединяющая логически связанные функции, константы, классы и другие сущности.
## Объявление пространства имен
Для создания пространства имен используется ключевое слово `namespace`.
```cpp {.example_for_playground .example_for_playground_002}
namespace Net
{
const std::string loopback = "127.0.0.1";
std::string get_hostname(IPv4 ip) { /* ... */ }
// ...
}
```
## Доступ к пространству имен
Для обращения к содержимому пространства имён применяется оператор разрешения области видимости `::`.
```cpp {.example_for_playground .example_for_playground_003}
std::println(Net::loopback);
std::println(Net::get_hostname("192.0.2.1"));
```
## Для чего нужны пространства имен
Пространства имён решают две основные задачи:
- Предотвращение конфликта имён. Например, если завести два пространства имён `crt` (cartesian) и `geo` (geography), то в них можно создавать функции с одинаковыми именами. Их вызов будет выглядеть так: `crt::distance(point1, point2)`, `geo::distance(point1, point2)`.
- Управление сложностью проекта: пространства имён упрощают организацию кода. Они структурируют проект на отдельные компоненты.
## Вложенные пространства имен
Пространства имён могут быть вложенными: `data::ODBC::bind()`. Чтобы к ним было удобно обращаться, имена лучше делать короткими: `std`, `Core`, `io`.
Все содержимое [коллекции библиотек boost](https://www.boost.org/) находится в одноимённом пространстве имён. Внутри него есть пространство имён `asio` библиотеки для работы с сетью. Внутри него — пространство `ip`, и уже внутри него — `tcp`. В этом пространстве имён есть класс `acceptor`. {.task_text}
Напишите, как выглядит полное обращение к `acceptor`. {.task_text}
```consoleoutput {.task_source #cpp_chapter_0053_task_0030}
```
Вложенность: boost -> asio -> ip -> tcp -> acceptor. Используйте оператор `::`. {.task_hint}
```cpp {.task_answer}
boost::asio::ip::tcp::acceptor
```
----------
## Резюме
- Пространства имён нужны для структурирования кода и предотвращения конфликта имён.
- Для создания пространства имён используется ключевое слово `namespace`.
- Чтобы обратиться к сущности внутри пространства имен, используется оператор разрешения области видимости `::`.
- Пространства имён могут быть вложенными.
Наша группа в telegram. Здесь можно задавать вопросы и общаться.
Задонатить. Если вам нравится курс, вы можете поддержать развитие площадки!