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; // Всі ідентифікатори з кімнати доступні

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

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