Avviso del compilatore (livello 1) C4297
'function': la funzione genera un'eccezione benché ciò non fosse previsto
Una dichiarazione di funzione contiene un identificatore (possibilmente implicito), noexcept
un identificatore di eccezione vuoto throw
o un attributo __declspec(nothrow) e la definizione contiene una o più istruzioni throw . Per risolvere l'errore C4297, non tentare di generare eccezioni in funzioni dichiarate __declspec(nothrow)
, noexcept(true)
o throw()
. In alternativa, rimuovere la specifica noexcept
, throw()
o __declspec(nothrow)
.
Per impostazione predefinita, il compilatore genera identificatori noexcept(true)
impliciti per le funzioni di deallocatori e distruttori definiti dall'utente e le speciali funzioni membro generate dal compilatore. Ciò è conforme allo standard ISO C++11. Per impedire la generazione di identificatori noexcept impliciti e ripristinare il comportamento non standard di Visual Studio 2013, usare l'opzione del compilatore /Zc:implicitNoexcept- . Per altre informazioni, vedere /Zc:implicitNoexcept (identificatori di eccezione impliciti).
Per altre informazioni sulle specifiche delle eccezioni, vedere Specifiche eccezioni (throw). Vedere anche /EH (Modello di gestione delle eccezioni) per informazioni su come modificare il comportamento di gestione delle eccezioni in fase di compilazione.
Questo avviso viene generato anche per le funzioni __declspec(dllexport) contrassegnate come extern "C", anche se sono funzioni C++.
L'esempio seguente genera l'errore C4297:
// C4297.cpp
// compile with: /W1 /LD
void __declspec(nothrow) f1() // declared nothrow
// try the following line instead
// void f1()
{
throw 1; // C4297
}