Spec-Zone.ru › C++

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:

Функции завершения
_Exit
(C++11)
вызывает нормальное завершение программы без очистки
(функция)
abort
вызывает аномальное завершение программы (без очистки)
(функция)
exit
вызывает нормальное завершение программы с очисткой
(функция)
quick_exit
(C++11)
вызывает быстрое завершение программы без полной очистки
(функция)
terminate
функция, вызываемая, когда обработка исключений терпит неудачу
(функция)
unexpected
(удалена в C++17)
функция, вызываемая, когда нарушается динамическое спецификатор исключений
(функция)
Подсказки для компилятора
unreachable
(C++23)
помечает недостижимую точку выполнения
(функция)
Функции, всегда выбрасывающие исключения
rethrow_exception
(C++11)
выбрасывает исключение из std::exception_ptr
(функция)
rethrow_nested
выбрасывает сохранённое исключение
(публичный член-функция std::nested_exception)
throw_with_nested
(C++11)
выбрасывает свой аргумент с std::nested_exception
(шаблон функции)
Нелокальные переходы (с C++17)
longjmp
переход к указанной позиции
(функция)

См. также

Документация по 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

Spec-Zone.ru

Настройки Оффлайн Что нового Помощь О нас
Spec-Zone .ru
спецификации, руководства, описания, API