мета-данные страницы
  •  

Различия

Показаны различия между двумя версиями страницы.

Ссылка на это сравнение

Следующая версия
Предыдущая версия
cpp:cpp_ultimate_guide:namespace [2025/10/31 15:23] – создано radi0devcpp:cpp_ultimate_guide:namespace [2025/11/09 12:07] (текущий) – внешнее изменение A User Not Logged in
Строка 2: Строка 2:
  
 ===== namespace ===== ===== namespace =====
 +
 +Пространство имен позволяет сгруппировать функционал в отдельные контейнеры. Пространство имен представляет блок кода, который содержит набор компонентов (функций, классов и т.д.) и имеет некоторое имя, которое прикрепляется к каждому компоненту из этого пространства имен. Полное имя каждого компонента — это имя пространства имен, за которым следует оператор :: (оператор области видимости или scope operator) и имя компонента. Примером может служить оператор cout, который предназначен для вывода строки на консоль и который определен в пространстве имен std. Соответственно чтобы обратиться к этому оператору, применяется выражение std::cout.
 +
 +Глобальное пространство имен - пространство имен по-умолчанию, используемое если не указанно иное пространство имен.
 +
 +++++пример|
 +<code cpp>
 +#include <iostream>
 + 
 +void print(const std::string&);
 + 
 +const std::string message{"hello"};
 +
 +int main() {
 +  print(message);
 +}
 + 
 +void print(const std::string& text) {
 +  std::cout << text << std::endl;
 +}
 +</code>
 +
 +Здесь определены функции print и main и константа message и не используется никакого пространства имен. Поэтому фактически функции print и main и константа message определены в глобальном пространстве имен. В принципе для обращения к ним также можно использовать оператор ::, только без названия пространства имен, хотя это и избыточно:
 +<code cpp>
 +int main() {
 +  ::print(::message);
 +}
 +</code>
 +++++
 +
 +==== Определение пространства имен ====
 +
 +<code cpp>
 +#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
 +}
 +</code>
 +
 +==== Вложенные пространства имен ====
 +
 +Одно пространство имен может содержать в себе другое
 +
 +<code cpp>
 +#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);
 +}
 +</code>
 +
 +для обращения к члену вложенного пространства имен нужно использовать цепочку обращений.
  
 ===== using ===== ===== using =====