Uyarı C26475
İşlev stili C-casts kullanmayın.
C++ Temel Yönergeleri: ES.49: Yayın kullanmanız gerekiyorsa adlandırılmış bir atama kullanın
İşlev stili atamalar (örneğin, int(1.1)
) sorgulanabilir güvenliğe sahip C stili atamaların (gibi (int)1.1
) başka bir biçimidir. Özellikle, derleyici C-casts veya işlev atamalarında herhangi bir veri kaybı olup olmadığını denetlemeye çalışmaz. Her iki durumda da, atamayı önlemek veya mümkünse bir kümeli başlatıcı kullanmak daha iyidir. Hiçbiri işe yaramazsa statik atamalar uygun olabilir, ancak Yönergeler Destek Kitaplığı'ndan yardımcı programları kullanmak yine de daha iyidir:
gsl::narrow
kayıpsız dönüştürmeyi sağlar ve mümkün değilse oluştururgsl::narrowing_error
.gsl::narrow_cast
dönüştürmenin verileri kaybedebileceğini ve kabul edilebilir olduğunu açıkça belirtir.
Açıklamalar
Bu kural yalnızca ilkel tür sabitleri için tetikler. Derleyici bu gibi durumlarda veri kaybını net bir şekilde algılayabilir ve kümelenmiş başlatıcı kullanılırsa bir hata yayar. Çalışma zamanı yürütmesi gerektiren durumlar C26493 NO_CSTYLE_CAST tarafından işaretlenir.
Varsayılan başlatıcılar bayraklı değildir (örneğin
int()
).
Örnek
Tehlikeli dönüştürme örneği:
constexpr auto planck_constant = float( 6.62607004082e-34 ); // C26475
Olası veri kaybını algılayan tehlikeli dönüştürme için derleyici hatası:
constexpr auto planck_constant = float{ 6.62607004082e-34 }; // Error C2397
Tehlikeli dönüştürmeyi düzeltmek için uygun şekilde boyutlandırılmış bir ilkel tür kullanın:
constexpr auto planck_constant = double{ 6.62607004082e-34 };