C++ attribute: noreturn (since C++11)
Indica que la función no retorna.
Contenidos |
Sintaxis
[
[
noreturn
]
]
|
|||||||||
Explicación
Indica que la función no devolverá el flujo de control a la función llamadora después de finalizar (por ejemplo, funciones que terminan la aplicación, lanzan excepciones, se ejecutan en bucle indefinidamente, etc.). Este atributo se aplica únicamente al nombre de la función que se declara en las declaraciones de funciones.
Si una función previamente declarada con [ [ noreturn ] ] es invocada y esa invocación eventualmente retorna, el comportamiento es indefinido en tiempo de ejecución .
La primera declaración de la función debe especificar este atributo si alguna declaración lo especifica. Si una función se declara con [ [ noreturn ] ] en una unidad de traducción, y la misma función se declara sin [ [ noreturn ] ] en otra unidad de traducción, el programa está mal formado; no se requiere diagnóstico.
Ejemplo
[[noreturn]] void f() { throw "error"; // OK } void q [[noreturn]] (int i) { // el comportamiento es indefinido si se llama con un argumento <= 0 if (i > 0) throw "positive"; } // void h() [[noreturn]]; // error: atributo aplicado al tipo de función de h, no a h misma int main() { try { f(); } catch(...) {} try { q(42); } catch(...) {} }
Biblioteca estándar
Las siguientes funciones estándar se declaran con el atributo
noreturn
:
Funciones de terminación |
|
|
(C++11)
|
provoca la terminación normal del programa sin limpieza
(función) |
|
provoca la terminación anormal del programa (sin limpieza)
(función) |
|
|
provoca la terminación normal del programa con limpieza
(función) |
|
|
(C++11)
|
provoca la terminación rápida del programa sin limpieza completa
(función) |
|
función llamada cuando falla el manejo de excepciones
(función) |
|
|
(obsoleto en C++11)
(eliminado en C++17)
|
función llamada cuando se viola una especificación de excepción dinámica
(función) |
Sugerencias del compilador |
|
|
(C++23)
|
marca un punto de ejecución inalcanzable
(función) |
Funciones que siempre lanzan excepciones |
|
|
(C++11)
|
lanza la excepción desde un
std::exception_ptr
(función) |
|
lanza la excepción almacenada
(función miembro pública de
std::nested_exception
)
|
|
|
(C++11)
|
lanza su argumento con
std::nested_exception
mezclado
(plantilla de función) |
Saltos no locales (desde C++17) |
|
|
salta a una ubicación especificada
(función) |
|
Informes de defectos
Los siguientes informes de defectos que modifican el comportamiento se aplicaron retroactivamente a los estándares de C++ publicados anteriormente.
| DR | Aplicado a | Comportamiento publicado | Comportamiento correcto |
|---|---|---|---|
| CWG 2924 | C++11 |
retornar desde una función
[
[
noreturn
]
]
resultaría en comportamiento indefinido |
resulta en comportamiento
indefinido en tiempo de ejecución |
Referencias
- Estándar C++23 (ISO/IEC 14882:2024):
-
- 9.12.10 Atributo Noreturn [dcl.attr.noreturn]
- Estándar C++20 (ISO/IEC 14882:2020):
-
- 9.12.9 Atributo Noreturn [dcl.attr.noreturn]
- Estándar C++17 (ISO/IEC 14882:2017):
-
- 10.6.8 Atributo Noreturn [dcl.attr.noreturn]
- Estándar C++14 (ISO/IEC 14882:2014):
-
- 7.6.3 Atributo Noreturn [dcl.attr.noreturn]
- Estándar C++11 (ISO/IEC 14882:2011):
-
- 7.6.3 Atributo Noreturn [dcl.attr.noreturn]
Véase también
|
Documentación de C
para
_Noreturn
|
|
|
Documentación de C
para
[[noreturn]]
|