Стандартная библиотека C++. Справочное руководство, 2-е издание

Стандартная библиотека C++. Справочное руководство, 2-е  издание
Автор: Николаи М. Джосаттис
Год: 2014
ISBN: 978-5-8459-1837-6
Страниц: 1136
Язык: Русский
Формат: PDF
Размер: 40 Мб

Download

Стандартная библиотека С++ содержит набор универсальных классов и интерфейсов, значительно расширяющих ядро языка С++. Однако эта библиотека не является самоочевидной. Для того чтобы полнее использовать возможности ее компонентов и извлечь из них максимальную пользу, необходим полноценный справочник, а не простое перечисление классов и их функций.
В данной книге описывается библиотека как часть нового стандарта ANSI/ISO C++ (C++11). Здесь содержится исчерпывающее описание каждого компонента библиотеки, включая его предназначение и структуру; очень подробно описываются сложные концепции и тонкости практического программирования, необходимые для их эффективного использования, а также ловушки и подводные камни; приводятся точные сигнатуры и определения наиболее важных классов и функций, а также многочисленные примеры работоспособных программ. Основным предметом изучения в книге является стандартная библиотека шаблонов (STL), в частности контейнеры, итераторы, функциональные объекты и алгоритмы.
В книге описаны все новые компоненты библиотеки, вошедшие в стандарт С++11, в частности:
– Параллельная работа
– Арифметика рациональных чисел
– Часы и таймеры
– Кортежи
– Новые контейнеры STL
– Новые алгоритмы STL
– Новые интеллектуальные указатели
– Случайные числа и распределения
– Свойства типов и утилиты
– Регулярные выражения
В книге также рассматриваются новый стиль программирования на С++ и его влияние на стандартную библиотеку, включая лямбда-функции, диапазонные циклы for, семантику перемещения и вариативные шаблоны.

+

Ядро языка C++ и его библиотеку обычно стандартизировали параллельно. Благодаря этому библиотека могла использовать преимущества, предоставляемые новыми средствами языка, а язык мог улучшаться за счет опыта реализации библиотеки. По этой причине стандартная библиотека языка C++ всегда использует конкретные средства языка, которых могло не быть в предыдущих версиях стандарта.

Таким образом, язык C++11 отличается от языка С++98/С++03, а тот, в свою очередь, отличается от языка C++, существовавшего до начала стандартизации. Если не знать об этой эволюции, то можно удивиться новым языковым средствам, используемым в библиотеке. В настоящей главе дан краткий обзор новых средств языка С++11, играющих важную роль в проектировании, понимании и применении стандартной библиотеки С++11. В конце главы описываются некоторые средства, существовавшие до появления стандарта C++11, но не получившие широкой известности.

Когда я писал эту книгу (2010-2011 гг.), не все компиляторы поддерживали новые языковые средства стандарта C++11. В ближайшее время это положение, по-видимому, изменится, поскольку все основные поставщики компиляторов языка C++ принимали участие в процессе его стандартизации1. Но некоторое время пользователи будут ограничены в выборе языковых средств, используемых в библиотеке. На протяжении книги все типичные и важные ограничения будут указываться в сносках.

Классы исключений для поддержки языка

Исключения для поддержки языка используются средствами языка C++. Следовательно, было бы логичнее считать их частью базовою языка, а не библиотеки. Эти исключения генерируются при неудачном выполнении некоторых операций.

Исключение класса bad_cast, определенного в заголовке , генерируется оператором dynamic_cast, если приведение типа ссылки во время выполнения завершается неудачей.

Исключение класса bad_typeid, определенного в заголовке , генерируется оператором typeid, предназначенным для идентификации типов во время выполнения. Если аргументом оператора typeid является нуль или нулевой указатель, генерируется исключение.

Исключение класса bad exception, определенного в заголовке , предназначено для обработки непредвиденных исключений. Оно может генерироваться функцией unexpected (), которая вызывается, если было сгенерировано исключение, не указанное в спецификации исключений соответствующей функции ((см. раздел 3.1.7).

Эти исключения также могут генерироваться библиотечными функциями. Например, исключение bad cast может генерироваться функцией use_facet (), если аспект локализации (facet) в конкретной локализации (locale) недоступен (см. раздел 16.2.2).

Классы исключений для логических ошибок

Классы исключений для логических ошибок обычно являются производными от класса logic_error. Логическими называют ошибки, которые можно предотвратить, например, с помощью дополнительной проверки аргументов функции. Примерами логических ошибок являются нарушение логических предусловий или инварианта класса. Стандартная библиотека C++ содержит следующие классы для логических ошибок.

Исключение класса invalid_argument используется для генерирования сообщений о некорректных аргументах, например, когда битовое множество (массив битов) инициализируется данными типа char, отличными от ‘ 0’ и ‘ 1’.

Исключение класса length_error используется для генерирования сообщений о попытке превысить установленные пределы, например, при добавлении к строке слишком большого количества символов.

Исключение класса out_of_range используется для генерирования сообщений о том, что аргумент выходит за пределы допустимых значений, например, при использовании неправильного индекса в коллекциях наподобие массивов или строк.

Исключение класса domain error используется для генерирования сообщений об ошибке выхода за пределы области допустимых значений.

В стандарте С++11 определен класс исключений future error для генерирования сообщений о логических ошибках при использовании асинхронных системных вызовов (см. главу 18). Отметим, что ошибки времени выполнения в этих ситуациях приводят к генерированию исключения класса system_error.