Not
Bu sayfaya erişim yetkilendirme gerektiriyor. Oturum açmayı veya dizinleri değiştirmeyi deneyebilirsiniz.
Bu sayfaya erişim yetkilendirme gerektiriyor. Dizinleri değiştirmeyi deneyebilirsiniz.
Aritmetik dönüştürmeler için static_cast kullanmayın. Ayraç başlatma,
gsl::narrow_castveyagsl::narrowkullanın.
C++ Temel Yönergeleri: Type.1: Yayınlardan kaçının
Bu kural, integral türleri arasında dönüştürme yapmak için statik atamaların kullanıldığı yerleri bulmaya yardımcı olur. Derleyici herhangi bir veri kaybı oluşursa uyarmayacağından bu tür atamalar güvenli değildir. Küme ayracı başlatıcıları, sabitlerin kullanıldığı ve derleyici hatasının istendiği durumlar için daha iyidir. Ayrıca Yönergeler Destek Kitaplığı'ndan amaçları net bir şekilde açıklamaya yardımcı olan yardımcı programlar da vardır:
-
gsl::narrowkayıpsız dönüştürmeyi sağlar ve mümkün değilse oluştururgsl::narrowing_error. -
gsl::narrow_castdönüştürmenin verileri kaybedebileceğini ve kabul edilebilir olduğunu açıkça belirtir.
Açıklamalar
- Bu kural yalnızca statik atamalar için uygulanır. C stili atamaların kullanılması önerilmez.
Kod analizi adı: NO_CASTS_FOR_ARITHMETIC_CONVERSION
Örnek
İşlenmeyen beklenmeyen veriler:
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
};
}
İşlenmeyen beklenmeyen veriler, daha güvenli sürüm:
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)
};
}