noexcept
(C++)
C++11: Menentukan apakah fungsi mungkin melemparkan pengecualian.
Sintaks
noexcept-specifier
:
noexcept
noexcept-expression
throw
(
)
noexcept-expression
:
noexcept
(
constant-expression
)
Parameter
constant-expression
Ekspresi konstan jenis bool
yang mewakili apakah kumpulan jenis pengecualian potensial kosong. Versi tidak bersyarat setara noexcept(true)
dengan .
Keterangan
noexcept-expression
adalah semacam spesifikasi pengecualian: akhiran untuk deklarasi fungsi yang mewakili sekumpulan jenis yang mungkin cocok dengan handler pengecualian untuk pengecualian apa pun yang keluar dari fungsi. Operator noexcept(constant_expression)
bersyarat unary ketika constant_expression
menghasilkan , dan sinonimnya noexcept
yang tidak bersyarat true
, tentukan bahwa kumpulan jenis pengecualian potensial yang dapat keluar dari fungsi kosong. Artinya, fungsi tidak pernah melemparkan pengecualian dan tidak pernah memungkinkan pengecualian untuk disebarluaskan di luar cakupannya. Operator noexcept(constant_expression)
ketika constant_expression
menghasilkan false
, atau tidak adanya spesifikasi pengecualian (selain untuk fungsi destruktor atau dealokasi), menunjukkan bahwa serangkaian pengecualian potensial yang dapat keluar dari fungsi adalah set dari semua jenis.
Tandai fungsi sebagai noexcept
hanya jika semua fungsi yang dipanggilnya, baik secara langsung atau tidak langsung, juga noexcept
atau const
. Pengkompilasi tidak selalu memeriksa setiap jalur kode untuk pengecualian yang mungkin menggelegak hingga noexcept
fungsi. Jika pengecualian keluar dari cakupan luar fungsi yang ditandai noexcept
, std::terminate
segera dipanggil, dan tidak ada jaminan bahwa destruktor objek dalam cakupan akan dipanggil. Gunakan noexcept
alih-alih penentu throw()
pengecualian dinamis . Spesifikasi pengecualian dinamis, atau throw(optional_type_list)
spesifikasi, tidak digunakan lagi di C++11 dan dihapus di C++17, kecuali untuk throw()
, yang merupakan alias untuk noexcept(true)
. Kami menyarankan Anda menerapkan noexcept
ke fungsi apa pun yang tidak pernah memungkinkan pengecualian untuk menyebarkan tumpukan panggilan. Ketika fungsi dideklarasikan noexcept
, fungsi memungkinkan pengkompilasi untuk menghasilkan kode yang lebih efisien dalam beberapa konteks yang berbeda. Untuk informasi selengkapnya, lihat Spesifikasi pengecualian.
Contoh
Templat fungsi yang menyalin argumennya mungkin dideklarasikan noexcept
pada kondisi bahwa objek yang disalin adalah tipe data lama biasa (POD). Fungsi seperti itu dapat dinyatakan seperti ini:
#include <type_traits>
template <typename T>
T copy_object(const T& obj) noexcept(std::is_pod<T>)
{
// ...
}
Lihat juga
Praktik terbaik C++ modern untuk pengecualian dan penanganan kesalahan
Spesifikasi pengecualian (throw
, noexcept
)
Saran dan Komentar
https://aka.ms/ContentUserFeedback.
Segera hadir: Sepanjang tahun 2024 kami akan menghentikan penggunaan GitHub Issues sebagai mekanisme umpan balik untuk konten dan menggantinya dengan sistem umpan balik baru. Untuk mengetahui informasi selengkapnya, lihat:Kirim dan lihat umpan balik untuk