Sdílet prostřednictvím


Upozornění C26475

Nepoužívejte přetypování ve stylu funkce C.

C++ Core Guidelines: ES.49: Pokud je nutné použít přetypování, použijte pojmenované přetypování.

Přetypování ve stylu funkce (například int(1.1)) jsou další formou přetypování ve stylu jazyka C (například (int)1.1), které mají pochybnou bezpečnost. Konkrétně se kompilátor nepokouší zkontrolovat, jestli může dojít ke ztrátě dat buď v přetypování jazyka C, nebo v přetypování funkcí. V oboupřípadechch Pokud ani jedno nefunguje, může být statické přetypování vhodné, ale přesto je lepší používat nástroje z knihovny podpory pokynů:

  • gsl::narrow zajišťuje bezeztrátový převod a vyvolá gsl::narrowing_error , pokud to není možné.
  • gsl::narrow_cast jasně uvádí, že převod může ztratit data a je přijatelný.

Poznámky

  • Toto pravidlo se aktivuje pouze pro konstanty primitivních typů. Kompilátor může v těchto případech jasně rozpoznat ztrátu dat a v případě použití inicializátoru složených závorek vygeneruje chybu. Případy, které by vyžadovaly provádění za běhu, jsou označeny C26493 NO_CSTYLE_CAST.

  • Výchozí inicializátory nejsou označeny příznakem (například int()).

Příklad

Příklad nebezpečného převodu:

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

Chyba kompilátoru při nebezpečném převodu a zjišťování potenciální ztráty dat:

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

Chcete-li opravit nebezpečný převod, použijte odpovídající primitivní typ velikosti:

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