С++ для начинающих




Стандартное пространство имен std


Все компоненты стандартной библиотеки С++ находятся в пространстве имен std. Каждая функция, объект и шаблон класса, объявленные в стандартном заголовочном файле, таком, как <vector> или <iostream>, принадлежат к этому пространству.

Если все компоненты библиотеки объявлены в std, то какая ошибка допущена в данном примере:

#include <vector>

#include <string>

#include <iterator>

int main()

{

    // привязка istream_iterator к стандартному вводу

    istream_iterator<string> infile( cin );

    // istream_iterator, отмечающий end-of-stream

    istream_iterator<string> eos;

    // инициализация svec элементами, считываемыми из cin

    vector<string> svec( infile, eos );

    // ...

}

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

  • заменить имена членов пространства std в этом примере соответствующими специфицированными именами;
  • применить using-объявления, чтобы сделать видимыми используемые члены пространства std;
  • употребить using-директиву, сделав видимыми все члены пространства std.
  • Членами пространства имен std в этом примере являются: шаблон класса istream_iterator, стандартный входной поток cin, класс string и шаблон класса vector.

    Простейшее решение – добавить using-директиву после директивы препроцессора #include:

    using namespace std;

    В данном примере using-директива делает все члены пространства std видимыми. Однако не все они нам нужны. Предпочтительнее пользоваться using-объявлениями, чтобы уменьшить вероятность коллизии имен при последующем добавлении в программу глобальных объявлений.

    Using-объявления, необходимые для компиляции этого примера, таковы:

    using std::istream_iterator;

    using std::string;

    using std::cin;

    using std::vector;

    Но куда их поместить? Если программа состоит из большого количества файлов, можно для удобства создать заголовочный файл, содержащий все эти using-объявления, и включать его в исходные файлы вслед за заголовочными файлами стандартной библиотеки.




    Содержание  Назад  Вперед