Spesifikasi tanpa lemparan pada fungsi inline yang hanya mengembalikan variabel anggota dan tidak mungkin melempar pengecualian dapat digunakan oleh beberapa kompiler untuk melakukan pesimisasi (kata yang dibuat untuk kebalikan dari optimasi) yang dapat memiliki efek buruk pada kinerja. Ini dijelaskan dalam literatur Boost: Pengecualian-spesifikasi
Dengan beberapa kompiler, spesifikasi tanpa-lemparan pada fungsi-fungsi non-inline mungkin bermanfaat jika optimasi yang benar dilakukan dan penggunaan fungsi tersebut berdampak pada kinerja dengan cara yang dibenarkan.
Bagi saya kedengarannya seperti apakah menggunakannya atau tidak adalah panggilan yang dilakukan oleh mata yang sangat kritis sebagai bagian dari upaya optimalisasi kinerja, mungkin menggunakan alat profil.
Kutipan dari tautan di atas untuk mereka yang tergesa-gesa (berisi contoh efek buruk yang tidak diinginkan dengan menetapkan lemparan pada fungsi sebaris dari kompiler naif):
Dasar pemikiran pengecualian-spesifikasi
Spesifikasi pengecualian [ISO 15.4] kadang-kadang diberi kode untuk menunjukkan pengecualian apa yang mungkin dilemparkan, atau karena programmer berharap mereka akan meningkatkan kinerja. Tetapi pertimbangkan anggota berikut dari penunjuk cerdas:
T & operator * () const throw () {return * ptr; }
Fungsi ini tidak memanggil fungsi lain; itu hanya memanipulasi tipe data fundamental seperti pointer Karena itu, tidak ada perilaku runtime dari pengecualian-spesifikasi yang dapat dipanggil. Fungsi ini sepenuhnya terpapar ke kompiler; memang itu dinyatakan inline. Oleh karena itu, kompiler pintar dapat dengan mudah menyimpulkan bahwa fungsi tidak mampu melempar pengecualian, dan melakukan optimasi yang sama akan dibuat berdasarkan pada pengecualian-spesifikasi kosong. Namun, kompiler "bodoh" dapat membuat semua jenis pesimis.
Sebagai contoh, beberapa kompiler mematikan inlining jika ada pengecualian-spesifikasi. Beberapa kompiler menambahkan blok coba / tangkap. Pesimisasi semacam itu dapat menjadi bencana kinerja yang membuat kode tidak dapat digunakan dalam aplikasi praktis.
Meskipun awalnya menarik, pengecualian-spesifikasi cenderung memiliki konsekuensi yang memerlukan pemikiran yang sangat cermat untuk dipahami. Masalah terbesar dengan pengecualian-spesifikasi adalah bahwa programmer menggunakannya seolah-olah mereka memiliki efek yang diinginkan oleh programmer, daripada efek yang sebenarnya mereka miliki.
Fungsi non-inline adalah satu tempat pengecualian-"melempar apa-apa"-spesifikasi mungkin memiliki beberapa manfaat dengan beberapa kompiler.