C++ attribute: noreturn (since C++11)
Указывает, что функция не возвращает управление.
Содержание |
Синтаксис
[
[
noreturn
]
]
|
|||||||||
Объяснение
Указывает, что функция не вернет управление вызывающей функции после завершения (например, функции, которые завершают приложение, генерируют исключения, выполняют бесконечный цикл и т.д.). Этот атрибут применяется только к имени объявляемой функции в объявлениях функций.
Если функция, ранее объявленная с [ [ noreturn ] ] вызывается и этот вызов в конечном счете возвращает управление, поведение является неопределенным во время выполнения .
Первое объявление функции должно указывать этот атрибут, если любое объявление его указывает. Если функция объявлена с [ [ noreturn ] ] в одной единице трансляции, и та же функция объявлена без [ [ noreturn ] ] в другой единице трансляции, программа является некорректной; диагностика не требуется.
Пример
[[noreturn]] void f() { throw "error"; // OK } void q [[noreturn]] (int i) { // поведение не определено, если вызвано с аргументом <= 0 if (i > 0) throw "positive"; } // void h() [[noreturn]]; // ошибка: атрибут применен к типу функции h, а не к самой h int main() { try { f(); } catch(...) {} try { q(42); } catch(...) {} }
Стандартная библиотека
Следующие стандартные функции объявлены с атрибутом
noreturn
:
Функции завершения |
|
|
(C++11)
|
вызывает нормальное завершение программы без очистки
(функция) |
|
вызывает аварийное завершение программы (без очистки)
(функция) |
|
|
вызывает нормальное завершение программы с очисткой
(функция) |
|
|
(C++11)
|
вызывает быстрое завершение программы без полной очистки
(функция) |
|
функция, вызываемая при неудачной обработке исключений
(функция) |
|
|
(устарело в C++11)
(удалено в C++17)
|
функция, вызываемая при нарушении динамической спецификации исключений
(функция) |
Подсказки компилятору |
|
|
(C++23)
|
отмечает недостижимую точку выполнения
(функция) |
Всегда выбрасывающие функции |
|
|
(C++11)
|
выбрасывает исключение из
std::exception_ptr
(функция) |
|
выбрасывает сохранённое исключение
(публичная функция-член
std::nested_exception
)
|
|
|
(C++11)
|
выбрасывает свой аргумент с добавлением
std::nested_exception
(шаблон функции) |
Нелокальные переходы (начиная с C++17) |
|
|
переходит к указанной позиции
(функция) |
|
Отчеты о дефектах
Следующие отчеты об изменениях поведения, влияющие на дефекты, были применены задним числом к ранее опубликованным стандартам C++.
| DR | Применяется к | Поведение в опубликованной версии | Корректное поведение |
|---|---|---|---|
| CWG 2924 | C++11 |
возврат из функции
[
[
noreturn
]
]
приводил к неопределённому поведению |
приводит к неопределённому поведению
во время выполнения |
Ссылки
- Стандарт C++23 (ISO/IEC 14882:2024):
-
- 9.12.10 Атрибут Noreturn [dcl.attr.noreturn]
- Стандарт C++20 (ISO/IEC 14882:2020):
-
- 9.12.9 Атрибут Noreturn [dcl.attr.noreturn]
- Стандарт C++17 (ISO/IEC 14882:2017):
-
- 10.6.8 Атрибут Noreturn [dcl.attr.noreturn]
- Стандарт C++14 (ISO/IEC 14882:2014):
-
- 7.6.3 Атрибут Noreturn [dcl.attr.noreturn]
- Стандарт C++11 (ISO/IEC 14882:2011):
-
- 7.6.3 Атрибут Noreturn [dcl.attr.noreturn]
Смотрите также
|
Документация C
для
_Noreturn
|
|
|
Документация C
для
[[noreturn]]
|