Пространства имён
Варианты
Действия

throw expression

Материал из cppreference.com
< cpp‎ | language

 
 
Язык С++
Общие темы
Управление программой
Операторы условного выполнения
Операторы повторения
Операторы перехода
Функции
объявление функции
объявление лямбда-функции
шаблон функции
спецификатор inline
спецификаторы исключений (устарело)
спецификатор noexcept (C++11)
Исключения
throw-выражение
Пространства имён
объявление пространства имён
псевдонимы пространства имён
Типы
спецификатор decltype (C++11)
Спецификаторы
cv-спецификаторы
спецификаторы продолжительности хранения
спецификатор constexpr (C++11)
спецификатор auto (C++11)
спецификатор alignas (C++11)
Инициализация
Литералы
Выражения
Утилиты
Типы
typedef-объявление
объявление псевдонима типа (C++11)
атрибуты (C++11)
Приведения типов
неявные преобразования
const_cast-преобразование
static_cast-преобразование
dynamic_cast-преобразование
reinterpret_cast-преобразование
C-подобное и функциональное приведение типов
Выделение памяти
Классы
Особые свойства классовых функций
Специальные функции-члены
Шаблоны
шаблон класса
шаблон функции
специализация шаблона
упакованные параметры (C++11)
Разное
Ассемблерные вставки
 
Сигналы ошибочное условие и выполняет обработчик ошибок.
Оригинал:
Signals an erroneous condition and executes an error handler.
Текст был переведён автоматически используя Переводчик Google.
Вы можете проверить и исправить перевод. Для инструкций щёлкните сюда.

Содержание

[править] Синтаксис

throw expression (1)
throw (2)

[править] Объяснение

более подробную информацию о попробовать и' улова (обработчик исключения) блоков
1)
Бросок выражение создает временный объект в неопределенных хранения, с того же типа, expression (с CV-квалификаторы удалено и типа преобразуется из массива T на указатель на T и из Функция, возвращающая T на указатель на функцию, возвращающую T, по мере необходимости) , и инициализирует его из expression таким же образом, аргументы функции или возвращаемых значений инициализируются из параметров функции или аргумента return выражения (например, копии элизии и ход строительства иметь место, если это возможно). Исключение объекта сохраняется до последнего пункта вылов завершения или до последнего std::exception_ptr, который ссылается этот объект будет уничтожен.
Оригинал:
The throw expression constructs a temporary object in unspecified storage, with the same type as expression (with cv-qualifiers removed and the type converted from array of T to pointer to T and from function returning T to pointer to function returning T, as necessary), and initializes it from expression in the same manner a function arguments or return values are initialized from the function parameters or the argument of a return expression (i.e. copy elision and move construction take place if possible). The exception object persists until the last catch clause completes or until the last std::exception_ptr that references this object is destroyed.
Текст был переведён автоматически используя Переводчик Google.
Вы можете проверить и исправить перевод. Для инструкций щёлкните сюда.
После исключения объектов построено, управление потоком работает в обратном направлении (стек вызовов), пока не достигнет начала try блока, после чего параметры соответствующих блоков catch сравнивают с брошенным expression, чтобы найти спички. Если совпадение не найдено, управление потоком продолжает раскручивать стек до следующего блока try, и так далее. Если совпадение найдено, то поток управления переходит к соответствующей catch блок (обработчик' исключение), который выполняет нормально.
Оригинал:
Once the exception object is constructed, the control flow works backwards (up the call stack) until it reaches the start of a try block, at which point the parameters of the associated catch blocks are compared with the thrown expression to find a match. If no match is found, the control flow continues to unwind the stack until the next try block, and so on. If a match is found, the control flow jumps to the matching catch block (the exception handler), which executes normally.
Текст был переведён автоматически используя Переводчик Google.
Вы можете проверить и исправить перевод. Для инструкций щёлкните сюда.
построены так как соответствующие попробуйте-блок был введен в обратном порядке строительства. Если исключение из конструктора, деструкторы вызываются для всех полностью построенные не статические, не вариант членов и базовых классов. Этот процесс называется' стек разматывания.
Оригинал:
As the control flow moves up the call stack, destructors are invoked for all objects with '
Текст был переведён автоматически используя Переводчик Google.
Вы можете проверить и исправить перевод. Для инструкций щёлкните сюда.
2)
Вбрасывание выражение без операндов могут быть использованы только внутри вылов блок (он называет std::terminate если используется иное). Она отказывается от исполнения улова блока и передает управление следующему пункту вылов соответствующий стек вызовов (но не к другим вылов пункта после того, как тот же блок попытки), повторное использование существующего объекта исключения: никакие новые объекты сделаны.
Оригинал:
The throw-expression without an operand may only be used inside a catch block (it calls std::terminate if used otherwise). It abandons the execution of the catch block and passes control to the next matching catch clause up the call stack (but not to another catch clause after the same try block), reusing the existing exception object: no new objects are made.
Текст был переведён автоматически используя Переводчик Google.
Вы можете проверить и исправить перевод. Для инструкций щёлкните сюда.
См. std::terminate и std::unexpected для обработки ошибок, возникающих во время обработки исключений.
Оригинал:
See std::terminate and std::unexpected for the handling of errors that arise during exception handling.
Текст был переведён автоматически используя Переводчик Google.
Вы можете проверить и исправить перевод. Для инструкций щёлкните сюда.

[править] Статистика

В то время вбрасывания выражение можно использовать для передачи управления произвольный блок кода до стека выполнения, для любых причин (по аналогии с std::longjmp), его предполагаемого использования является обработка ошибок.
Оригинал:
While throw-expression can be used to transfer control to an arbitrary block of code up the execution stack, for arbitrary reasons (similar to std::longjmp), its intended usage is error handling.
Текст был переведён автоматически используя Переводчик Google.
Вы можете проверить и исправить перевод. Для инструкций щёлкните сюда.

[править] Обработка ошибок

Бросив исключение используется для сигнала ошибки от функций, где «ошибки», как правило, ограничиваются только следующие Ошибка цитирования Отсутствует закрывающий тег </ref>[1]:
Оригинал:
{{{2}}}
Текст был переведён автоматически используя Переводчик Google.
Вы можете проверить и исправить перевод. Для инструкций щёлкните сюда.
# Неудачи установить инварианты
Оригинал:
# Failures to establish invariants
Текст был переведён автоматически используя Переводчик Google.
Вы можете проверить и исправить перевод. Для инструкций щёлкните сюда.
# Неудачи в соответствии с постусловий
Оригинал:
# Failures to meet the postconditions
Текст был переведён автоматически используя Переводчик Google.
Вы можете проверить и исправить перевод. Для инструкций щёлкните сюда.
# Неудачи в соответствии с предпосылками вызывающего абонента
Оригинал:
# Failures to meet the preconditions of the caller
Текст был переведён автоматически используя Переводчик Google.
Вы можете проверить и исправить перевод. Для инструкций щёлкните сюда.
В частности, это означает, что неудачи конструкторов и большинство операторов следует сообщать, бросая исключения.
Оригинал:
In particular, this implies that the failures of constructors and most operators should be reported by throwing exceptions.
Текст был переведён автоматически используя Переводчик Google.
Вы можете проверить и исправить перевод. Для инструкций щёлкните сюда.

[править] Исключение безопасности

После того, как ошибка сообщает функции, дополнительные гарантии могут быть предоставлены по отношению к государственной программы. Следующие четыре уровня исключением гарантий, как правило, признаются Ошибка цитирования Отсутствует закрывающий тег </ref>[2][3], which are strict supersets of each other:
Оригинал:
{{{2}}}
Текст был переведён автоматически используя Переводчик Google.
Вы можете проверить и исправить перевод. Для инструкций щёлкните сюда.
# Nothrow (или nofail) исключение гарантии - функция никогда не бросает исключений.
Оригинал:
# Nothrow (or nofail) exception guarantee -- the function never throws exceptions.
Текст был переведён автоматически используя Переводчик Google.
Вы можете проверить и исправить перевод. Для инструкций щёлкните сюда.
# Сильная гарантия исключения - Если функция генерирует исключение, состояние программы откат в состояние непосредственно перед вызовом функции.
Оригинал:
# Strong exception guarantee -- If the function throws an exception, the state of the program is rolled back to the state just before the function call.
Текст был переведён автоматически используя Переводчик Google.
Вы можете проверить и исправить перевод. Для инструкций щёлкните сюда.
# Основная гарантией исключения - Если функция генерирует исключение, программа находится в допустимом состоянии. Это может потребовать очистки, но все инварианты целы.
Оригинал:
# Basic exception guarantee -- If the function throws an exception, the program is in a valid state. It may require cleanup, but all invariants are intact.
Текст был переведён автоматически используя Переводчик Google.
Вы можете проверить и исправить перевод. Для инструкций щёлкните сюда.
# Не исключение гарантии - Если функция генерирует исключение, программа не может быть в допустимом состоянии: утечки ресурсов, повреждение памяти и других инвариантных разрушающих ошибки, возможно, произошло.
Оригинал:
# No exception guarantee -- If the function throws an exception, the program may not be in a valid state: resource leaks, memory corruption, or other invariant-destroying errors may have occurred.
Текст был переведён автоматически используя Переводчик Google.
Вы можете проверить и исправить перевод. Для инструкций щёлкните сюда.

[править] Исключение объектов

В то время как объекты любого типа и полное резюме указатели к мочеиспусканию могут быть выброшены в качестве исключения объектах, все стандартные функции библиотеки бросить анонимную временных объектов по значению, и типы эти объекты являются производными (прямо или косвенно) от std::exception. Определяемые пользователем исключения обычно следуют этой модели. Ошибка цитирования Отсутствует закрывающий тег </ref>[4]
Оригинал:
{{{2}}}
Текст был переведён автоматически используя Переводчик Google.
Вы можете проверить и исправить перевод. Для инструкций щёлкните сюда.
Чтобы избежать ненужного копирования объекта исключения и объектов нарезки, лучшие практики для улова положения, чтобы поймать по ссылке. Ошибка цитирования Отсутствует закрывающий тег </ref>[5][6]
Оригинал:
{{{2}}}
Текст был переведён автоматически используя Переводчик Google.
Вы можете проверить и исправить перевод. Для инструкций щёлкните сюда.

[править] Ключевые слова

throw

[править] Пример

[править] Список литературы

  1. H.Sutter, A. Alexandrescu (2004), "C++ Coding Standards", Item 70
  2. H. Sutter (2000) "Exceptional C++"
  3. D. Abrahams (2001) "Exception Safety in Generic Components"
  4. M. Cline, C++FAQ Lite 17.11
  5. M. Cline, C++FAQ Lite 17.12
  6. H.Sutter, A. Alexandrescu (2004) "C++ Coding Standards" Item 73
Оригинал:
Текст был переведён автоматически используя Переводчик Google.
Вы можете проверить и исправить перевод. Для инструкций щёлкните сюда.

[править] См. также