Пространства имен
Разные разработчики библиотек могут определить глобальные объекты с одинаковыми именами или функции с одинаковыми именами и параметрами. Чтобы избежать конфликта имен при использовании этих библиотек в одной программе, в С++ появилась возможность разделения глобального пространства имен. Каждый разработчик должен определить свое
пространство имен:
namespace имя {
объявления и определения
}
Описания, относящиеся к одному пространству имен, могут быть разделены на несколько модулей. Можно определять вложенные пространства имен.
Обращаться к объектам и функциям из того же пространства имен можно напрямую. При
использовании этих объектов и функций вне этого пространства, нужно либо обращаться указывая их полное имя:
имя пространства имен::имя функции(аргументы), либо сделать их доступными для прямого использования с помощью оператора
using имя пространства имен::имя функции;
или
using namespace имя пространства имен;
По умолчанию все глобальные объекты и функции определяются в
неименованном пространстве имен. Можно обращаться к глобальному объекту следующим образом:
int x=1;
int main()
{ int x=2;
cout << x << "\n"; //
cout << ::x << "\n"; //
}
Все объекты и функции стандартной библиотеки C++ STL определены в пространстве имен
std. Поэтому необходимо в программе указывать оператор
using:
#include <iostream>
using namespace std;
int main()
{ cout<<"Hello, world!\n";
}
Существуют также варианты заголовочных файлов для стандартной библиотеки C, в которых все функции объявлены в пространстве имен
std. Например,
<cstdio> содержит объявления из
<stdio.h> (для получения имени C++ варианта из имени файла заголовочного файла C нужно убрать ".h" и добавить букву "с" в начале).