Dela via


Kompilatorvarning (nivå 1) C4297

"function" : funktionen antas inte utlösa ett undantag, men gör det

Anmärkningar

En funktionsdeklaration innehåller en (möjligen implicit) noexcept specificerare, en tom throw undantagsspecificerare eller ett __declspec-attribut (nothrow) och definitionen innehåller en eller flera throw-instruktioner . Lös C4297 genom att inte försöka utlösa undantag i funktioner som deklareras __declspec(nothrow), noexcept(true) eller throw(). Du kan också ta bort specifikationen noexcept, throw()eller __declspec(nothrow) .

Som standard genererar kompilatorn implicita noexcept(true) specificerare för användardefinierade destruktorer och deallocatorfunktioner och kompilatorgenererade specialmedlemsfunktioner. Detta överensstämmer med STANDARDEN ISO C++11. Om du vill förhindra generering av implicita noexcept-specificerare och återställa kompilatorn till det icke-standardmässiga beteendet i Visual Studio 2013 använder du alternativet /Zc:implicitNoexcept- compiler. Mer information finns i /Zc:implicitNoexcept (implicita undantagsspecificerare).

Mer information om undantagsspecifikationer finns i Undantagsspecifikationer (utkast). Se även /EH (undantagshanteringsmodell) för information om hur du ändrar beteendet för undantagshantering vid kompileringstillfället.

Den här varningen genereras också för __declspec(dllexport) funktioner markerade externt "C", även om de är C++-funktioner.

Example

I följande exempel genereras C4297:

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