Эта справочная документация описывает компоненты, которые программы могут использовать для сообщения об условиях ошибок, исходящих из операционной системы или других низкоуровневых интерфейсов прикладных программ.
Повышаю. Компоненты системной библиотеки никогда не изменяют значения<
errno>.
В библиотеке задокументировано использование нескольких функций C++11, включая<
noexcept>и явные операторы преобразования. Реальная реализация использует функции C++11 только тогда, когда они доступны, и в противном случае возвращается к функциям C++03.
При желании пользователи могут определить следующие макросы. Предоставляются разумные по умолчанию, поэтому пользователи могут игнорировать эти макросы, если они предпочитают.
Macro Name
Default
Effect if defined
BOOST_ERROR_CODE_HEADER_ONLY
Not defined.
The implementation is header-only, and the
Boost.System library is not built. Overrides other link and library macros.
BOOST_SYSTEM_DYN_LINK
Defined if BOOST_ALL_DYN_LINK is defined,
otherwise not defined.
Boost.System library is dynamically linked. If not defined,
static linking is assumed.
BOOST_SYSTEM_NO_LIB
Defined if BOOST_ALL_NO_LIB is defined,
otherwise not defined.
Boost.System library does not use the Boost auto-link
facility.
В процессе добавления Boost. В стандартной библиотеке C++0x комитет C++ изменил некоторые названия. Чтобы облегчить переход, буст. Система обесценивает старые имена, но продолжает их предоставлять, если не определен макрос<BOOST_SYSTEM_NO_DEPRECATED>.
Два статических конста заменяются функциями. Эти изменения лучше всего фиксируются путем глобального добавления () к этим именам, чтобы превратить их в функциональные вызовы.
Старое использование, теперь сломано
Замена
<generic_category>
<generic_category()>
<system_category>
<system_category()>
Макросы BOOST_POSIX_API и BOOST_WINDOWS_API больше не поддерживаются.
Значение каждой<errc_t>постоянной должно быть таким же, как значение<<cerrno>>макроса, показанного в приведенном выше синопсисе.
Пользователи могут специализироваться на шаблонах<is_error_code_enum>и<
is_error_condition_enum>, чтобы указать, что тип имеет право на автоматические конверсии классов<error_code>и<error_condition>соответственно.
Класс<error_category>определяет базовый класс для типов, используемых для идентификации источника и кодирования конкретной категории кода ошибки.
[Примечание:Классы могут быть получены из<error_category>для поддержки дополнительных категорий ошибок.— конец примечания
Класс<error_category>служит базовым классом для типов, используемых для идентификации источника и кодирования конкретной категории кода ошибки. Классы могут быть получены из<error_category>для поддержки категорий ошибок в дополнение к тем, которые определены в библиотеке Boost System. Такие классы должны вести себя так, как указано в настоящем подпункте. [править]Примечание:<error_category>объекты передаются по ссылке, и два таких объекта равны, если они имеют один и тот же адрес. Это означает, что приложения, использующие пользовательские<error_category>типы, должны создавать один объект каждого такого типа.— конец примечания
virtual error_condition default_error_condition( int ev ) const noexcept;
Возвращение: <error_condition( ev, *this )>.
[--Note: Derived classes will typically convert ev
to some portable error_category, such as generic_category(),
and return it as an error_condition for that category. --end
note]
Класс<error_code>описывает объект, используемый для хранения значений кода ошибки, таких как значения, исходящие из операционной системы или других низкоуровневых интерфейсов прикладных программ.[Примечание:Класс<error_code>является дополнением к отчету об ошибках .— конец примечания ]
Возврат:если<value() != 0>, возвращает значение, которое будет оценивать<true>в булевом контексте; в противном случае возвращает значение, которое будет оценивать<false>в булевом контексте. Возвращаемый тип стоимости не может быть конвертирован в<int>.
Бросок:Ничего.
[Примечание:Это преобразование может использоваться в контекстах, где ожидается<bool>(например, условие<if>); однако неявные преобразования (например, в<int>), которые могут произойти с<bool>, не допускаются, устраняя некоторые источники ошибки пользователя. Одним из возможных вариантов реализации для этого типа является указатель на член.— конец примечания]
Класс<error_condition>описывает объект, используемый для хранения значений, идентифицирующих условия ошибки.[Примечание:<error_condition>значения являются переносными абстракциями, а<error_code>значения являются специфичными для реализации.— конец примечания ]
Возврат:Если<value() != 0>возвращает значение, которое будет оценивать<true>в булевом контексте; в противном случае возвращает значение, которое будет оценивать<false>. Тип возврата не должен быть конвертируемым в<int>.
Бросок:Ничего.
[] Примечание:Это преобразование может использоваться в контекстах, где ожидается<bool>(например, условие if); однако неявные преобразования (например, в<int>), которые могут произойти с<bool>, не допускаются, устраняя некоторые источники ошибки пользователя. Одним из возможных вариантов реализации для этого типа является указатель на участника.-- конец примечания]
Функции, которые определяют аргумент в форме<error_code& ec=throws>, с соответствующими квалификаторами пространства имен, имеют следующую семантику обработки ошибок:
Пост-условия:
Если<&ec != &throws>и произошла ошибка:
ec.value()возвращает номер конкретной ошибки реализации для конкретной ошибки, которая произошла.
Если бы не было<&ec != &throws>и ошибки<ec.clear()>.
Броски:
Если ошибка возникает и<&ec == &throws>, бросает исключение типа<system_error>или типа, полученного из<system_error>. Функция члена исключения<code()>возвращает ссылку на<error_code>объект с поведением, указанным вПосткондиции.
Класс<system_error>описывает объект исключения, используемый для сообщения об ошибках, которые связаны<error_code>. Такие ошибки обычно происходят из операционной системы или других низкоуровневых интерфейсов прикладных программ.