Инженерия · Сборка и архитектура

Пространства имён

Порядок в именах, когда кода становится много

~20 мин 7 шагов

После урока ты сможешь

  • Помещать код проекта в своё пространство имён
  • Понимать, почему using namespace std в заголовке — плохо
  • Прятать детали реализации

Шаг 1 из 7

Когда имена сталкиваются

В маленькой программе все имена твои, и конфликтов нет. В настоящем проекте рядом живут твой код, стандартная библиотека и несколько сторонних библиотек. Функция log есть у библиотеки логирования, у математической библиотеки и, скорее всего, у тебя. Структура Config найдётся почти в каждой библиотеке.

Если два разных log окажутся в одной программе, линковщик не поймёт, какой из них какой. Решение, которым C++ пользуется повсюду, — пространства имён (namespaces). Это фамилии для имён: math::log и logging::log — разные функции, хотя зовут их одинаково.

Ты пользуешься этим с первого урока: std:: и есть пространство имён стандартной библиотеки. std::println — функция println из семьи std.