Sdílet prostřednictvím


noexcept (C++)

C++11: Určuje, jestli může funkce vyvolat výjimky.

Syntaxe

noexcept-specifier:
noexcept
noexcept-expression
throw ( )
noexcept-expression:
noexcept ( constant-expression )

Parametry

constant-expression
Konstantní výraz typu bool , který představuje, zda sada potenciálních typů výjimek je prázdná. Nepodmíněná verze je ekvivalentní noexcept(true).

Poznámky

A noexcept-expression je druh specifikace výjimky: přípona deklarace funkce, která představuje sadu typů, které mohou být spárovány obslužnou rutinou výjimky pro všechny výjimky, které ukončí funkci. Unární podmíněný operátor noexcept(constant_expression) při výnosu truea jeho nepodmíněné synonymum noexcepturčuje, že sada potenciálních typů výjimek, které mohou ukončit funkciconstant_expression, je prázdná. To znamená, že funkce nikdy nevyvolá výjimku a nikdy neumožňuje rozšířit výjimku mimo její obor. noexcept(constant_expression) Operátor při constant_expression výnosu falsenebo nepřítomnost specifikace výjimky (jiné než pro destruktor nebo funkci uvolnění), označuje, že sada potenciálních výjimek, které mohou funkci ukončit, je sada všech typů.

Funkci označte jako noexcept pouze v případě, že všechny funkce, které volá, buď přímo nebo nepřímo, jsou také noexcept nebo const. Kompilátor nemusí nutně kontrolovat všechny cesty kódu pro výjimky, které by mohly bubliny až na noexcept funkci. Pokud výjimka ukončí vnější rozsah označené noexceptfunkce , std::terminate je vyvolána okamžitě a neexistuje žádná záruka, že destruktory všech objektů v oboru budou vyvolány. Použijte noexcept místo specifikátoru throw()dynamické výjimky . Specifikace dynamické výjimky nebo throw(optional_type_list) specifikace byla v jazyce C++11 zastaralá a odebrána v jazyce C++17 s výjimkou throw(), což je alias pro noexcept(true). Doporučujeme použít noexcept všechny funkce, které nikdy nepovolují rozšíření zásobníku volání výjimku. Když je funkce deklarována noexcept, umožňuje kompilátoru generovat efektivnější kód v několika různých kontextech. Další informace naleznete v tématu Specifikace výjimek.

Příklad

Šablona funkce, která kopíruje svůj argument, může být deklarována noexcept za podmínky, že zkopírovaný objekt je prostý starý datový typ (POD). Taková funkce by mohla být deklarována takto:

#include <type_traits>

template <typename T>
T copy_object(const T& obj) noexcept(std::is_pod<T>)
{
   // ...
}

Viz také

Moderní osvědčené postupy jazyka C++ pro výjimky a zpracování chyb
Specifikace výjimek (throw, noexcept)