Espacios de nombres
Variantes
Acciones

std::uncaught_exception, std::uncaught_exceptions

De cppreference.com
< cpp‎ | error
 
 
Biblioteca de servicios
 
Control de errores
Control de excepciones
uncaught_exceptionuncaught_exceptions
(hasta C++20)(C++17)
Fallas del control de excepciones
(hasta C++17)
(hasta C++17)
(C++11)(hasta C++17)
(hasta C++17)
Códigos de error
Códigos de error
 
Definido en el archivo de encabezado <exception>
(1)
bool uncaught_exception()throw();
(hasta C++11)
bool uncaught_exception()noexcept;
(desde C++11)
(en desuso en C++17)
(eliminado en C++20)
int uncaught_exceptions()noexcept;
(2) (desde C++17)
1) Detecta si el hilo actual tiene un objeto de excepción vivo. Es decir, se ha lanzado o vuelto a lanzar una excepción y todavía no se ha ingresado a una cláusula catch coincidente, a std::terminate o a std::unexpected. En otras palabras, std::uncaught_exception detectas si el desenredo de la pila está en curso.
2) Detecta cuántas excepciones se han lanzado o se han vuelto a lanzar en el hilo actual y aún no sea ha ingresado a sus cláusulas catch coincidentes.

A veces es seguro lanzar una excepción aun cuando std::uncaught_exception()==true. Por ejemplo, si el desenredo de la pila ocasiona que se destruya un objeto, el destructor de ese objeto podría ejecutar código que lanza una excepción siempre y cuando la excepción se atrape por algún bloque catch antes de que se escape del destructor.

Contenido

[editar]Parámetros

(Ninguno)

[editar]Valor de retorno

1)true si el desenredo de pila está en curso en este hilo.
2) El número de objetos de excepción no atrapados en el hilo actual.

[editar]Notas

Un ejemplo donde se usa uncaught_exceptions que devuelve enteros es en la biblioteca boost.log: la expresión BOOST_LOG(logger)<< foo(); primero crea un objeto guardia y graba el número de excepciones sin atrapar en su constructor. La salida se realiza por el destructor del objeto guardia a menos que foo() lance (en cuyo caso el número de excepciones sin atrapar en el destructor es mayor que el número que se observó en el constructor).

[editar]Ejemplo

#include <iostream>#include <exception>#include <stdexcept>   struct Foo {int count = std::uncaught_exceptions(); ~Foo(){std::cout<<(count == std::uncaught_exceptions()?"~Foo() llamado normalmente\n":"~Foo() llamado durante desenredo de la pila\n");}};int main(){ Foo f;try{ Foo f;std::cout<<"Excepcion lanzada\n";throwstd::runtime_error("excepcion de prueba");}catch(conststd::exception& e){std::cout<<"Excepcion atrapada: "<< e.what()<<'\n';}}

Salida:

Excepcion lanzada ~Foo() llamado durante desenredo de la pila Excepcion atrapada: excepcion de prueba ~Foo() llamado normalmente

[editar]Véase también

Función llamada cuando falla el control de excepciones.
(función)[editar]
Tipo de puntero compartido para la manipulación de objetos de excepción.
(typedef)[editar]
Captura la excepción actual en un std::exception_ptr
(función)[editar]

[editar]Enlaces externos

close