Пространство имен 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 все идентификаторы этого пространства доступны так, как если бы они были
    объявлены глобально. Например, рассмотрим следующую команду:

      using namespace std;
    

    Эта команда позволит использовать такую запись:

      cout << hex << 3.4 << endl;
    

    Учтите, что в сложных программах это может привести к периодическим конфликтам имен или, что еще хуже, к непредсказуемым
    последствиям из-за запутанных правил перегрузки. Никогда не используйте директиву using при отсутствии полной
    информации о контексте (например, в заголовочных файлах, модулях или библиотеках).

   
Примеры, приводимые в здесь, невелики, поэтому для простоты в листингах примеров обычно используется последний вариант.

   
На следующем шаге мы рассмотрим заголовочные файлы.



Вы можете оставить комментарий, или Трекбэк с вашего сайта.

Оставить комментарий