Ostrzeżenie kompilatora (poziom 1) C4297
"function": zakładano, że funkcja nie zgłasza wyjątku, ale nie
Deklaracja funkcji zawiera (prawdopodobnie niejawny) noexcept
specyfikator, pusty throw
specyfikator wyjątku lub atrybut __declspec(nothrow), a definicja zawiera co najmniej jedną instrukcję throw . Aby rozwiązać problem C4297, nie należy próbować zgłaszać wyjątków w funkcjach, które są zadeklarowane __declspec(nothrow)
, noexcept(true)
lub throw()
. Możesz też usunąć specyfikację noexcept
, throw()
lub __declspec(nothrow)
.
Domyślnie kompilator generuje niejawne noexcept(true)
specyfikatory dla funkcji destruktorów zdefiniowanych przez użytkownika i funkcji cofania przydziału oraz specjalnych funkcji składowych generowanych przez kompilator. Jest to zgodne ze standardem ISO C++11. Aby zapobiec generowaniu niejawnych specyfikatorów noexcept i przywrócić kompilator do nietypowego zachowania programu Visual Studio 2013, użyj opcji /Zc:implicitNoexcept- kompilatora. Aby uzyskać więcej informacji, zobacz /Zc:implicitNoexcept (niejawne specyfikatory wyjątków).
Aby uzyskać więcej informacji na temat specyfikacji wyjątków, zobacz Specyfikacje wyjątków (throw). Zobacz też /EH (Model obsługi wyjątków), aby uzyskać informacje na temat modyfikowania zachowania obsługi wyjątków w czasie kompilacji.
To ostrzeżenie jest również generowane dla funkcji __declspec(dllexport) oznaczonych jako extern "C", nawet jeśli są to funkcje języka C++.
Poniższy przykład generuje C4297:
// C4297.cpp
// compile with: /W1 /LD
void __declspec(nothrow) f1() // declared nothrow
// try the following line instead
// void f1()
{
throw 1; // C4297
}
Opinia
https://aka.ms/ContentUserFeedback.
Dostępne już wkrótce: W 2024 r. będziemy stopniowo wycofywać zgłoszenia z serwisu GitHub jako mechanizm przesyłania opinii na temat zawartości i zastępować go nowym systemem opinii. Aby uzyskać więcej informacji, sprawdź:Prześlij i wyświetl opinię dla