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 static_cast untuk konversi aritmatika. Gunakan inisialisasi kurung kurawal,
gsl::narrow_cast, ataugsl::narrow.
Pedoman Inti C++: Type.1: Hindari cast
Aturan ini membantu menemukan tempat di mana cast statis digunakan untuk mengonversi antara jenis integral. Pemeran ini tidak aman karena pengkompilasi tidak akan memperingatkan jika terjadi kehilangan data. Penginisialisasi kurung lebih baik untuk kasus di mana konstanta digunakan, dan kesalahan pengompilasi diinginkan. Ada juga utilitas dari Pustaka Dukungan Pedoman yang membantu menjelaskan niat dengan jelas:
-
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 diimplementasikan untuk cast statis. Penggunaan cast gaya C tidak disarankan.
Nama analisis kode: NO_CASTS_FOR_ARITHMETIC_CONVERSION
Contoh
Data tak tertangani tak terduga:
rgb from_24bit(std::uint32_t v) noexcept {
return {
static_cast<std::uint8_t>(v >> 16), // C26472, what if top byte is non-zero?
static_cast<std::uint8_t>((v >> 8) & 0xFF), // C26472
static_cast<std::uint8_t>(v & 0xFF) // C26472
};
}
Data tak terduga yang tidak tertangani, versi yang lebih aman:
rgb from_24bit(std::uint32_t v) noexcept {
return {
gsl::narrow<std::uint8_t>(v >> 16),
gsl::narrow_cast<std::uint8_t>((v >> 8) & 0xFF),
gsl::narrow_cast<std::uint8_t>(v & 0xFF)
};
}