Jegyzet
Az oldalhoz való hozzáférés engedélyezést igényel. Próbálhatod be jelentkezni vagy könyvtárat váltani.
Az oldalhoz való hozzáférés engedélyezést igényel. Megpróbálhatod a könyvtár váltását.
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::narrowbiztosítja a veszteségmentes konverziót, és dob,gsl::narrowing_errorha ez nem lehetséges. -
gsl::narrow_castegyé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 };