Шаг 43.
Библиотека STL.
Пространство имен std
На этом шаге мы рассмотрим различные способы задания пространства имен.
При использовании модулей и/или библиотек всегда существует вероятность конфликтов имен, которые возникают из-за того, что в
модулях и библиотеках один и тот же идентификатор может применяться для разных целей. Для решения этой проблемы в C++
поддерживается концепция пространств имен. Пространство имен определяет область видимости идентификаторов.
В отличие от классов пространства имен открыты для расширений, определяемых в любых источниках. Таким образом, в пространстве
имен могут определяться компоненты, распределенные по нескольким физическим модулям. Характерным примером такого
компонента является стандартная библиотека C++, поэтому вполне логично, что в ней используется пространство имен.
Все идентификаторы стандартной библиотеки C++ определяются в пространстве имен с именем std.
В соответствии с концепцией пространств имен существуют три варианта использования идентификаторов из стандартной библиотеки
C++.
- Непосредственное уточнение идентификатора (например, полная запись std::ostream вместо ostream).
В этом варианте записи полная команда вывода может выглядеть так:
std::cout << std::hex <<3.4 << std::endl;
- Использование объявления using. Например, следующий фрагмент предоставляет локальную возможность
пропуска префикса std:: для cout и endl:
using std::cout;
using std::endl;
В этом случае предыдущая команда записывается так:
cout << std::hex << 3.4 << endl;
- Самый простой вариант - использование директивы using. После выполнения директивы
using для пространства имен std все идентификаторы этого пространства доступны так, как если бы они были
объявлены глобально. Например, рассмотрим следующую команду:
Эта команда позволит использовать такую запись:
cout << hex << 3.4 << endl;
Учтите, что в сложных программах это может привести к периодическим конфликтам имен или, что еще хуже, к непредсказуемым
последствиям из-за запутанных правил перегрузки. Никогда не используйте директиву using при отсутствии полной
информации о контексте (например, в заголовочных файлах, модулях или библиотеках).
Примеры, приводимые в здесь, невелики, поэтому для простоты в листингах примеров обычно используется последний вариант.
На следующем шаге мы рассмотрим заголовочные файлы.
Предыдущий шаг
Содержание
Следующий шаг