Warnung C26475
Verwenden Sie keine Funktionsstil-C-Umwandlungen.
C++ Core Guidelines: ES.49: If you must use a cast, use a named cast
Funktionsformat-Umwandlungen (z. B int(1.1)
. ) sind eine andere Form von C-Stil-Umwandlungen (wie ), (int)1.1
die fragwürdige Sicherheit aufweisen. Insbesondere versucht der Compiler nicht zu überprüfen, ob Datenverluste entweder in C-Casts oder in Funktions casts auftreten können. In beiden Fällen ist es besser, eine Umwandlung zu vermeiden oder wenn möglich einen geschweiften Initialisierer zu verwenden. Wenn keines funktioniert, sind statische Umwandlungen möglicherweise geeignet, aber es ist immer noch besser, Dienstprogramme aus der Richtlinien-Supportbibliothek zu verwenden:
gsl::narrow
stellt eine verlustlose Konvertierung sicher und löst sie ausgsl::narrowing_error
, wenn dies nicht möglich ist.gsl::narrow_cast
stellt klar fest, dass die Konvertierung Daten verlieren kann und es akzeptabel ist.
Hinweise
Diese Regel wird nur für Konstanten von Grundtypen ausgelöst. Der Compiler kann in diesen Fällen eindeutig Datenverlust erkennen und einen Fehler ausgeben, wenn ein geschweifter Initialisierer verwendet wird. Die Fälle, in denen laufzeitgesteuerte Ausführung erforderlich wäre, werden von C26493 NO_CSTYLE_CAST gekennzeichnet.
Standardinitialisierer werden nicht gekennzeichnet (z. B
int()
. ).
Beispiel
Beispiel für eine gefährliche Konvertierung:
constexpr auto planck_constant = float( 6.62607004082e-34 ); // C26475
Compilerfehler für gefährliche Konvertierung, Erkennen potenzieller Datenverluste:
constexpr auto planck_constant = float{ 6.62607004082e-34 }; // Error C2397
Um die gefährliche Konvertierung zu korrigieren, verwenden Sie einen geeigneten Grundtyp:
constexpr auto planck_constant = double{ 6.62607004082e-34 };