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

Иногда различные библиотеки, или даже код программы, содержат совпадающие имена классов, функций, переменных или констант. В этом случае при сборке программы компилятор выдаст ошибку (например, двойное определение класса/функции или неправильное использование имени). Для решения проблемы конфликта имён было введен механизм пространства имён. Под пространством имён понимают именованное множество имён классов, функций, переменных, констант.

Пространство имён определяется при помощи ключевого слова namespace. Объявление пространства имён, а также элементов пространства имён, происходит следующим образом:

namespace mySpace{
	int myVar;
	void function(){
		std::cout << "function from namespace 'mySpace'" << std::endl;
	}
}

void function(){
	std::cout << "function from global namespace" << std::endl;
}

Существует глобальное пространство имён (пространство имён по умолчанию), оно включает в себя все элементы, не объявленные в конкретном пространстве имён. Доступ к элементам, объявленном в пространстве имён происходит при помощи оператора :: . Ниже показан пример использования функции из пространства имён и функции из глобального пространства.

mySpace::function();
function();

Пространство имён можно объединить с глобальным пространством имён следующим образом:

using namespace mySpace; 

В этом случае программист получает прямой доступ к классам и функциям, объявленным в пространстве имён mySpace, что ему позволяет их использовать без указания пространства имён.

Рекомендация: Старайтесь не использовать объединений с глобальным пространством имен. [Google CPP Guide Style]

По желанию, программист может открыть прямой доступ к конкретному имени из пространства имён при помощи директивы using:

using mySpace::myVar;

Пространства имён могут включать в себя другие пространства имён. Добавлять имена в пространство имён можно в различных местах кода программы.

Стандартная библиотека С++ определена в пространстве имён std.

Last updated