C++/Основи/Простори імен

< C++

Простори імен

ред.

Простори імен (namespaces) призначені для локалізації імен ідентифікаторів, і попередження їх конфліктів. По замовчуванню всі ідентифікатори знаходяться в глобальному просторі імен, тому часті випадки існування двох різних об'єктів з однаковими іменами, що призводить до помилок. Щоб цьому запобігти глобальний простір імен ділять на менші. Наприклад стандартну бібліотеку C++ винесено в область названу std.

Створення просторів імен

ред.

Щоб створити простір імен використовують ключове слово namespace. Код:

 namespace space_name
 {
    // Оголошення
 }

Доступ до ідентифікаторів з просторів імен

ред.

Щоб отримати доступ до об'єктів з простору іменн з за його меж використовують оператор дозволу області видимості ( :: ). Наприклад:

 namespace some
 {
     int something;
 }
 something=1; // Помилка, something невидиме.
 some::something=1; // Ми вказали в якій області його шукати.

Правда такий спосіб може бути страшенно незручним, якщо ми використовуємо багато ідентифікаторів не з нашої області видимості. Щоб полегшити нам життя придумана директива using. Хай ми маємо простір кімнати:

 namespace room
 {
    Wall wall1,wall2,wall3,wall4;
    Ceil ceil;
 }

Можна внести стелю в наш іменний простір написавши що ми її будемо використовувати:

 using room::ceil;
 ceil=42; // Тепер стеля видима
 wall1=wall2; // А таке все ще викличе помилку!

А можна взагалі розкрити увесь простір імен:

 using room;
 wall1=wall2=wall3; // Всі ідентифікатори з кімнати доступні

Деякі особливості просторів імен

ред.

Можна робити простори імен без назви. Це просто для того щоб зробити локальні змінні невидимими поза областю. Крім того можна описувати кілька просторів імен з одним ім'ям. Тоді це буде один, і той же простір, просто рознесений в різні частини файлу, чи взагалі в різні файли.