Poznámka:
Přístup k této stránce vyžaduje autorizaci. Můžete se zkusit přihlásit nebo změnit adresáře.
Přístup k této stránce vyžaduje autorizaci. Můžete zkusit změnit adresáře.
C++11: Určuje, zda 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)