Megosztás:


Figyelmeztetés C26475

Ne használjon C-öntött függvénystílust.

C++ Alapvető irányelvek: ES.49: Ha szereposztást kell használnia, használjon elnevezett leadást

A függvénystílusú öntöttek (például int(1.1)) a C-stílusú öntvények (például (int)1.1) egy másik formája, amelyek biztonsága megkérdőjelezhető. Pontosabban a fordító nem próbálja ellenőrizni, hogy bármilyen adatvesztés történhet-e C-leadásokban vagy függvény leadásokban. Mindkét esetben jobb, ha kerüljük a öntést, vagy ha lehetséges, használjunk merev inicializálót. Ha egyik sem működik, a statikus leadások megfelelőek lehetnek, de még mindig jobb, ha az Irányelvek támogatási kódtár segédprogramjait használja:

  • gsl::narrow biztosítja a veszteségmentes konverziót, és dob, gsl::narrowing_error ha ez nem lehetséges.
  • gsl::narrow_cast egyértelműen kimondja, hogy az átalakítás adatvesztést okozhat, és elfogadható.

Megjegyzések

  • Ez a szabály csak primitív típusú állandók esetén aktiválódik. A fordító képes egyértelműen észlelni az adatvesztést ezekben az esetekben, és hibát jelez, ha egy braced initializert használ. A futásidejű végrehajtást igénylő eseteket a C26493 NO_CSTYLE_CAST jelöli meg.

  • Az alapértelmezett inicializálók nincsenek megjelölve (például int()).

példa

Veszélyes konverziós példa:

constexpr auto planck_constant = float( 6.62607004082e-34 ); // C26475

Fordítóhiba a veszélyes átalakításhoz, a lehetséges adatvesztés észleléséhez:

constexpr auto planck_constant = float{ 6.62607004082e-34 }; // Error C2397

A veszélyes átalakítás kijavításához használjon egy megfelelő méretű primitív típust:

constexpr auto planck_constant = double{ 6.62607004082e-34 };