std::uncaught_exception
Материал из cppreference.com
|
|
Эта страница была переведена автоматически с английской версии вики используя Переводчик Google.
Перевод может содержать ошибки и странные формулировки. Наведите курсор на текст, чтобы увидеть оригинал. Вы можете помочь в исправлении ошибок и улучшении перевода. Для инструкций перейдите по ссылке. Щёлкните здесь, чтобы увидеть английскую версию этой страницы |
| Определён в заголовочном файле <exception>
|
||
| bool uncaught_exception(); |
||
Обнаруживает, если текущий поток имеет живой объект исключения, то есть исключение было брошено и еще не вступил в соответствующий пункт улова, std::terminate или std::unexpected. Иными словами, std::uncaught_exception обнаруживает, если стек разматывания В настоящее время ведется.
Оригинал:
Detects if the current thread has a live exception object, that is, an exception has been thrown and not yet entered a matching catch clause, std::terminate or std::unexpected. In other words, std::uncaught_exception detects if stack unwinding is currently in progress.
Текст был переведён автоматически используя Переводчик Google.
Вы можете проверить и исправить перевод. Для инструкций щёлкните сюда.
Вы можете проверить и исправить перевод. Для инструкций щёлкните сюда.
Иногда это безопасно исключение даже во время std::uncaught_exception() == true. Например, если исключения перехватываются и игнорируется в деструкторе, они не могут распространяться из него и не приведет к std::terminate.
Оригинал:
Sometimes it's safe to throw an exception even while std::uncaught_exception() == true. For example, if exceptions are caught and ignored in a destructor, they can't propagate out of it and won't lead to std::terminate.
Текст был переведён автоматически используя Переводчик Google.
Вы можете проверить и исправить перевод. Для инструкций щёлкните сюда.
Вы можете проверить и исправить перевод. Для инструкций щёлкните сюда.
Содержание |
[править] Параметры
(Нет)
[править] Возвращаемое значение
true, если раскручивание стека в настоящее время прогресс в этой теме.
Оригинал:
true if stack unwinding is currently in progress in this thread.
Текст был переведён автоматически используя Переводчик Google.
Вы можете проверить и исправить перевод. Для инструкций щёлкните сюда.
Вы можете проверить и исправить перевод. Для инструкций щёлкните сюда.
[править] Исключения
спецификация noexcept:
noexcept
[править] Пример
Запустить этот код
#include <iostream> #include <exception> #include <stdexcept> struct Foo { ~Foo() { if (std::uncaught_exception()) { std::cout << "~Foo() called during stack unwinding\n"; } else { std::cout << "~Foo() called normally\n"; } } }; int main() { Foo f; try { Foo f; std::cout << "Exception thrown\n"; throw std::runtime_error("test exception"); } catch (const std::exception& e) { std::cout << "Exception caught: " << e.what() << '\n'; } }
Вывод:
Exception thrown ~Foo() called during stack unwinding Exception caught: test exception ~Foo() called normally
[править] См. также
| Функция вызывается, если не удалось обработать исключение Оригинал: function called when exception handling fails Текст был переведён автоматически используя Переводчик Google. Вы можете проверить и исправить перевод. Для инструкций щёлкните сюда. (функция) | |
| (C++11) |
тип shared pointer для обработки объектов исключений Оригинал: shared pointer type for handling exception objects Текст был переведён автоматически используя Переводчик Google. Вы можете проверить и исправить перевод. Для инструкций щёлкните сюда. (определение типа) |