Observação
O acesso a essa página exige autorização. Você pode tentar entrar ou alterar diretórios.
O acesso a essa página exige autorização. Você pode tentar alterar os diretórios.
Não use conversões C do estilo de função.
Diretrizes Principais do C++: ES.49: se você precisar usar uma conversão, use uma conversão nomeada
Conversões de estilo de função (por exemplo, int(1.1)) são outra forma de conversões de estilo C (como (int)1.1), que têm segurança questionável. Especificamente, o compilador não tenta verificar se alguma perda de dados pode ocorrer em conversões C ou em conversões de funções. Em ambos os casos, é melhor evitar a conversão ou usar um inicializador entre chaves, se possível. Se nenhum dos dois funcionar, as conversões estáticas poderão ser adequadas, mas ainda é melhor usar utilitários da Biblioteca de Suporte de Diretrizes:
-
gsl::narrowgarante a conversão sem perdas e gerarágsl::narrowing_errorse não for possível. -
gsl::narrow_castafirma claramente que a conversão pode perder dados e isso é aceitável.
Comentários
Essa regra é acionada apenas para constantes de tipos primitivos. O compilador pode detectar claramente a perda de dados nesses casos e emitir um erro se um inicializador preparado for usado. Os casos que exigiriam execução em tempo de execução são sinalizados por C26493 NO_CSTYLE_CAST.
Inicializadores padrão não são sinalizados (por exemplo,
int()).
Exemplo
Exemplo de conversão perigosa:
constexpr auto planck_constant = float( 6.62607004082e-34 ); // C26475
Erro do compilador para conversão perigosa, detectando uma possível perda de dados:
constexpr auto planck_constant = float{ 6.62607004082e-34 }; // Error C2397
Para corrigir a conversão perigosa, use um tipo primitivo de tamanho apropriado:
constexpr auto planck_constant = double{ 6.62607004082e-34 };