Пространство имен позволяет сгруппировать функционал в отдельные контейнеры. Пространство имен представляет блок кода, который содержит набор компонентов (функций, классов и т.д.) и имеет некоторое имя, которое прикрепляется к каждому компоненту из этого пространства имен. Полное имя каждого компонента — это имя пространства имен, за которым следует оператор :: (оператор области видимости или scope operator) и имя компонента. Примером может служить оператор cout, который предназначен для вывода строки на консоль и который определен в пространстве имен std. Соответственно чтобы обратиться к этому оператору, применяется выражение std::cout.
Глобальное пространство имен - пространство имен по-умолчанию, используемое если не указанно иное пространство имен.
#include <iostream> namespace hello { const std::string message{"hello work"}; void print(const std::string& text) { std::cout << text << std::endl; } } // namespace hello int main() { hello::print(hello::message); // hello work }
Одно пространство имен может содержать в себе другое
#include <iostream> namespace console { namespace messages { const std::string hello{"hello"}; const std::string welcome{"Welcome"}; const std::string goodbye{"Good bye"}; } // namespace messages void print(const std::string& text) { std::cout << text << std::endl; } void print_default() { std::cout << messages::hello << std::endl; } } // namespace console int main() { console::print(console::messages::hello); }
для обращения к члену вложенного пространства имен нужно использовать цепочку обращений.
используеться для задания псевдонимов1)
Например:
#include <iostream> using ullong = unsigned long long; int main() { ullong n {10234}; std::cout << n << std::endl; }
стоит отметить что для задания псевдонимов можно исопльзовать и старых подход из Си через typedef:
#include <iostream> typedef unsigned long long ullong; int main() { ullong n {10234}; std::cout << n << std::endl; }
так же using можно использовать для задания членов пространств имен, которые мы сможем использовать не указывая пренадлежность к пространству имен
using пространство_имен::объект
#include <iostream> using std::cin; using std::cout; using std::endl; int main() { int age; cout << "Input age: "; cin >> age; cout << "Your age: " << age << endl; }
или и вовсе охватить все члены пространства имен так: using namespace пространство_имен