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 noexcept
polož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
}