Aracılığıyla paylaş


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şturur gsl::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 };