Bagikan melalui


Peringatan C26475

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::narrow memastikan konversi tanpa kerugian dan melempar gsl::narrowing_error jika tidak memungkinkan.
  • gsl::narrow_cast dengan 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 };