Compiler Warning (level 1) C4297
'function' : fungsi diasumsikan tidak melempar pengecualian tetapi tidak
Deklarasi fungsi berisi penentu (mungkin implisit), noexcept
penentu pengecualian kosong throw
, atau atribut __declspec(nothrow), dan definisi berisi satu atau beberapa pernyataan lemparan . Untuk mengatasi C4297, jangan mencoba melempar pengecualian dalam fungsi yang dinyatakan __declspec(nothrow)
, noexcept(true)
atau throw()
. Atau, hapus noexcept
spesifikasi , , throw()
atau __declspec(nothrow)
.
Secara default, kompilator menghasilkan penentu implisit noexcept(true)
untuk fungsi destruktor dan deallocator yang ditentukan pengguna dan fungsi anggota khusus yang dihasilkan kompilator. Ini sesuai dengan standar ISO C++11. Untuk mencegah pembuatan penentu noexcept implisit dan mengembalikan pengompilasi ke perilaku non-standar Visual Studio 2013, gunakan opsi kompilator /Zc:implicitNoexcept- . Untuk informasi selengkapnya, lihat /Zc:implicitNoexcept (Penentu Pengecualian Implisit).
Untuk informasi selengkapnya tentang spesifikasi pengecualian, lihat Spesifikasi Pengecualian (throw). Selain itu, lihat /EH (Model Penanganan Pengecualian) untuk informasi tentang cara memodifikasi perilaku penanganan pengecualian pada waktu kompilasi.
Peringatan ini juga dihasilkan untuk fungsi __declspec(dllexport) yang ditandai extern "C", bahkan jika fungsi tersebut adalah fungsi C++.
Sampel berikut menghasilkan C4297:
// C4297.cpp
// compile with: /W1 /LD
void __declspec(nothrow) f1() // declared nothrow
// try the following line instead
// void f1()
{
throw 1; // C4297
}