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 noexcept
nebo 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