Sdílet prostřednictvím


Upozornění kompilátoru (úroveň 1) C4297

'function' : funkce předpokládá, že nevyvolá výjimku, ale dělá

Deklarace funkce obsahuje (pravděpodobně implicitní) noexcept specifikátor, prázdný throw specifikátor výjimky nebo atribut __declspec(nothrow) a definice obsahuje jeden nebo více příkazů throw . Chcete-li vyřešit C4297, nepokoušejte se vyvolat výjimky ve funkcích, které jsou deklarovány __declspec(nothrow), noexcept(true) nebo throw(). Případně odeberte noexceptpoložku , throw()nebo __declspec(nothrow) specifikaci.

Kompilátor ve výchozím nastavení generuje implicitní noexcept(true) specifikátory pro uživatelem definované destruktory a funkce uvolnění a speciální členské funkce generované kompilátorem. To odpovídá standardu ISO C++11. Pokud chcete zabránit generování implicitních specifikátorů noexceptu a vrátit kompilátor k nestandardnímu chování sady Visual Studio 2013, použijte možnost kompilátoru /Zc:implicitNoexcept- . Další informace naleznete v tématu /Zc:implicitNoexcept (implicitní specifikátory výjimek).

Další informace o specifikacích výjimek naleznete v tématu Specifikace výjimek (throw). Informace o úpravě chování zpracování výjimek v době kompilace najdete také v tématu /EH (Model zpracování výjimek).

Toto upozornění se také generuje pro funkce __declspec(dllexport) označené extern "C", i když jsou funkcemi jazyka C++.

Následující ukázka vygeneruje C4297:

// C4297.cpp
// compile with: /W1 /LD
void __declspec(nothrow) f1()   // declared nothrow
// try the following line instead
// void f1()
{
   throw 1;   // C4297
}