Sdílet prostřednictvím


nothrow (C++)

Specifické pro Microsoft

__declspec Rozšířený atribut, který lze použít v deklaraci funkcí.

Syntaxe

return-type__declspec(nothrow) [call-convention] function-name ([argument-list])

Poznámky

Doporučujeme, aby všechny nové kódy používaly noexcept operátor místo __declspec(nothrow).

Tento atribut oznamuje kompilátoru, že deklarovaná funkce a funkce, které volá, nikdy nevyvolají výjimku. Nevynucuje však direktivu. Jinými slovy, nikdy nezpůsobí std::terminate vyvolání, na rozdíl od noexceptnebo v std:c++17 režimu (Visual Studio 2017 verze 15.5 a novější), throw().

V modelu synchronního zpracování výjimek, který je nyní výchozí, může kompilátor odstranit mechanismus sledování životnosti určitých nerozvinutelných objektů v takové funkci a významně tak snížit velikost kódu. Vzhledem k následující direktivě preprocesoru jsou tři níže uvedené deklarace funkce ekvivalentní v /std:c++14 režimu:

#define WINAPI __declspec(nothrow) __stdcall

void WINAPI f1();
void __declspec(nothrow) __stdcall f2();
void __stdcall f3() throw();

V /std:c++17 režimu není ekvivalentní ostatním, které používají__declspec(nothrow), throw() protože to způsobí std::terminate vyvolání, pokud je vyvolána výjimka z funkce.

Deklarace void __stdcall f3() throw(); používá syntaxi definovanou standardem C++. V jazyce C++17 throw() bylo klíčové slovo zastaralé.

END Microsoft Specific

Viz také

__declspec
noexcept
Klíčová slova