Простір імен
Простори імен (namespaces) призначені для локалізації імен ідентифікаторів, і попередження їх конфліктів. По замовчуванню всі ідентифікатори знаходяться в глобальному просторі імен, тому часті випадки існування двох різних об'єктів з однаковими іменами, що призводить до помилок. Щоб цьому запобігти глобальний простір імен ділять на менші. Наприклад стандартну бібліотеку C++ винесено в область названу std.
Зміст |
C++ [ред.]
Створення просторів імен [ред.]
Щоб створити простір імен використовують ключове слово namespace. Код:
namespace <ім'я_простору>
{
// Оголошення
}
Доступ до ідентифікаторів з просторів імен [ред.]
Щоб отримати доступ до об'єктів з простору іменн з за його меж використовують оператор дозволу області видимості ( :: ). Наприклад:
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; // Всі ідентифікатори з кімнати доступні
Деякі особливості просторів імен [ред.]
Можна робити простори імен без назви. Це просто для того щоб зробити локальні змінні невидимими поза областю. Крім того можна описувати кілька просторів імен з одним ім'ям. Тоді це буде одний, і той же простір, просто рознесений в різні частини файлу, чи взагалі в різні файли.
Неіменований простір імен або простір імен визначений прямо чи непрямо в неіменованому просторі імен має внутрішнє зв'язування (англ. internal linkage).[1]
Примітки [ред.]
- ↑ ISO/IEC 14882:2011, 3.5 Program and linkage.
Посилання [ред.]
| Ця стаття не містить посилань на джерела. (лютий 2011) |
