Nota:
El acceso a esta página requiere autorización. Puede intentar iniciar sesión o cambiar directorios.
El acceso a esta página requiere autorización. Puede intentar cambiar los directorios.
C++11: Especifica si una función podría producir excepciones.
Sintaxis
noexcept-specifier:
noexcept
noexcept-expression
throw
(
)
noexcept-expression:
noexcept
(
constant-expression
)
Parámetros
constant-expression
Expresión constante de tipo bool que representa si el conjunto de posibles tipos de excepción está vacío. La versión incondicional es equivalente a noexcept(true).
Observaciones
Es noexcept-expression un tipo de especificación de excepción: un sufijo a una declaración de función que representa un conjunto de tipos que podría coincidir con un controlador de excepciones para cualquier excepción que salga de una función. Operador condicional noexcept(constant_expression) unario cuando constant_expression produce true, y su sinónimo noexceptincondicional , especifica que el conjunto de posibles tipos de excepción que pueden salir de una función está vacío. Es decir, la función nunca inicia una excepción y nunca permite que se propague una excepción fuera de su ámbito. El operador noexcept(constant_expression) cuando constant_expression produce falseo la ausencia de una especificación de excepción (distinta de para un destructor o una función de desasignación), indica que el conjunto de posibles excepciones que pueden salir de la función es el conjunto de todos los tipos.
Marque una función como noexcept solo si todas las funciones a las que llama, directa o indirectamente, también noexcept son o const. El compilador no comprueba necesariamente todas las rutas de acceso de código para ver las excepciones que podrían propagarse a una noexcept función. Si una excepción sale del ámbito externo de una función marcada como noexcept, std::terminate se invoca inmediatamente y no hay ninguna garantía de que se invocarán destructores de ningún objeto dentro del ámbito. Use noexcept en lugar del especificador throw()de excepciones dinámico. La especificación de excepción dinámica, o throw(optional_type_list) especificación, estaba en desuso en C++11 y se quitó en C++17, excepto para throw(), que es un alias para noexcept(true). Se recomienda aplicar noexcept a cualquier función que nunca permita que una excepción propague la pila de llamadas. Cuando se declara noexceptuna función, permite al compilador generar código más eficaz en varios contextos diferentes. Para obtener más información, consulte Especificaciones de excepciones.
Ejemplo
Una plantilla de función que copia su argumento puede declararse noexcept en la condición de que el objeto que se va a copiar sea un tipo de datos antiguo (POD) sin formato. Esta función podría declararse de la siguiente manera:
#include <type_traits>
template <typename T>
T copy_object(const T& obj) noexcept(std::is_pod<T>)
{
// ...
}
Consulte también
Procedimientos recomendados de C++ moderno para las excepciones y el control de errores
Especificaciones de excepción (throw, noexcept)