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.1die 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 aus gsl::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 };