Catatan
Akses ke halaman ini memerlukan otorisasi. Anda dapat mencoba masuk atau mengubah direktori.
Akses ke halaman ini memerlukan otorisasi. Anda dapat mencoba mengubah direktori.
Jangan gunakan gaya fungsi C-casts.
C++ Pedoman Inti: ES.49: Jika Anda harus menggunakan pemeran, gunakan pemeran bernama
Transmisi gaya fungsi (misalnya, int(1.1)) adalah bentuk lain dari cast gaya C (seperti (int)1.1), yang memiliki keamanan yang dipertanyakan. Secara khusus, pengkompilasi tidak mencoba memeriksa apakah ada kehilangan data dapat terjadi baik di C-casts atau dalam cast fungsi. Dalam kedua kasus, lebih baik menghindari transmisi atau menggunakan inisialisasi braced jika memungkinkan. Jika tidak berfungsi, pemeran statis mungkin cocok, tetapi masih lebih baik menggunakan utilitas dari Pustaka Dukungan Pedoman:
-
gsl::narrowmemastikan konversi tanpa kerugian dan melempargsl::narrowing_errorjika tidak memungkinkan. -
gsl::narrow_castdengan jelas menyatakan bahwa konversi dapat kehilangan data dan dapat diterima.
Keterangan
Aturan ini hanya diaktifkan untuk konstanta jenis primitif. Pengompilasi dapat dengan jelas mendeteksi kehilangan data dalam kasus ini dan memancarkan kesalahan jika penginisialisasi braced digunakan. Kasus yang memerlukan eksekusi run-time ditandai oleh C26493 NO_CSTYLE_CAST.
Penginisialisasi default tidak ditandai (misalnya
int()).
Contoh
Contoh konversi berbahaya:
constexpr auto planck_constant = float( 6.62607004082e-34 ); // C26475
Kesalahan pengkompilasi untuk konversi berbahaya, mendeteksi potensi kehilangan data:
constexpr auto planck_constant = float{ 6.62607004082e-34 }; // Error C2397
Untuk memperbaiki konversi berbahaya, gunakan jenis primitif berukuran tepat:
constexpr auto planck_constant = double{ 6.62607004082e-34 };