C++ атрибут: noreturn (с C++11)
Указывает, что функция не возвращает значение.
Синтаксис
[[noreturn]] |
Объяснение
Указывает, что функция не вернёт управление вызывающей функции после завершения (например, функции, которые завершают приложение, выбрасывают исключения, зацикливаются и т. д.).
Этот атрибут применяется к имени объявляемой функции только в объявлениях функций. Поведение неопределено, если функция с этим атрибутом фактически возвращает значение.
Первое объявление функции должно указывать этот атрибут, если его указывает любое объявление. Если функция объявлена с [[noreturn]] в одном файле трансляции, и та же функция объявлена без [[noreturn]] в другом файле трансляции, программа некорректна; диагностика не требуется.
Пример
[[noreturn]] void f()
{
throw "error";
// OK
}
void q [[noreturn]] (int i)
{
// behavior is undefined if called with an argument <= 0
if (i > 0)
throw "positive";
}
// void h() [[noreturn]]; // error: attribute applied to function type of h, not h itself
int main()
{
try { f(); } catch(...) {}
try { q(42); } catch(...) {}
}Стандартная библиотека
Следующие стандартные функции объявлены с атрибутом noreturn:
Функции завершения |
|
|
(C++11) | вызывает нормальное завершение программы без очистки (функция) |
| вызывает аномальное завершение программы (без очистки) (функция) |
|
| вызывает нормальное завершение программы с очисткой (функция) |
|
|
(C++11) | вызывает быстрое завершение программы без полной очистки (функция) |
| функция, вызываемая, когда обработка исключений терпит неудачу (функция) |
|
|
(удалена в C++17) | функция, вызываемая, когда нарушается динамическое спецификатор исключений (функция) |
Подсказки для компилятора |
|
|
(C++23) | помечает недостижимую точку выполнения (функция) |
Функции, всегда выбрасывающие исключения |
|
|
(C++11) | выбрасывает исключение из std::exception_ptr (функция) |
| выбрасывает сохранённое исключение (публичный член-функция std::nested_exception) |
|
|
(C++11) | выбрасывает свой аргумент с std::nested_exception (шаблон функции) |
Нелокальные переходы (с C++17) |
|
| переход к указанной позиции (функция) |
|
См. также
Документация по C для _Noreturn |
|
Документация по C для [[noreturn]] |
© cppreference.com
Licensed under the Creative Commons Attribution-ShareAlike Unported License v3.0.
https://en.cppreference.com/w/cpp/language/attributes/noreturn