Existe alguma razão para preferir static_cast<>
o estilo C? Eles são equivalentes? Existe algum tipo de diferença de velocidade?
c++
casting
static-cast
dicroce
fonte
fonte
Respostas:
As conversões no estilo C ++ são verificadas pelo compilador. As conversões no estilo C não são e podem falhar no tempo de execução.
Além disso, as conversões no estilo c ++ podem ser pesquisadas com facilidade, enquanto é realmente difícil pesquisar as conversões no estilo c.
Outro grande benefício é que os quatro modelos diferentes de estilo C ++ expressam a intenção do programador de maneira mais clara.
Ao escrever C ++, eu sempre usaria os C ++ sobre o estilo C.
fonte
dynamic_cast
s.(int)something
não pode falhar - você é convertido para int ou erro do compilador.Em resumo :
static_cast<>()
dá a você a capacidade de verificar o tempo de compilação, o elenco do estilo C não.static_cast<>()
é mais legível e pode ser detectado facilmente em qualquer lugar dentro de um código fonte C ++, C_Style cast is'nt.Mais explicações :
A conversão estática realiza conversões entre tipos compatíveis . É semelhante ao elenco do estilo C, mas é mais restritivo. Por exemplo, a conversão no estilo C permitiria que um ponteiro inteiro aponte para um caractere.
Como isso resulta em um ponteiro de 4 bytes (um ponteiro para um tipo de dados de 4 bytes) apontando para 1 byte de memória alocada, a gravação nesse ponteiro causará um erro em tempo de execução ou substituirá alguma memória adjacente.
Em contraste com a conversão no estilo C, a conversão estática permitirá que o compilador verifique se os tipos de dados de ponteiro e ponta são compatíveis, o que permite ao programador capturar essa atribuição incorreta de ponteiro durante a compilação.
Você também pode verificar esta página para obter mais explicações sobre os lançamentos em C ++: Clique aqui
fonte
Consulte Uma comparação dos operadores de conversão de C ++ .
fonte
fonte
Um ótimo post explicando diferentes lançamentos em C / C ++ e o que o elenco em estilo C realmente faz: https://anteru.net/blog/2007/12/18/200/index.html
fonte
static_cast
verifica no momento da compilação se a conversão não está entre tipos obviamente incompatíveis. Ao contráriodynamic_cast
, nenhuma verificação de compatibilidade de tipos é feita em tempo de execução. Além disso, astatic_cast
conversão não é necessariamente segura.static_cast
é usado para converter de ponteiro para classe base em ponteiro para classe derivada ou entre tipos nativos, como enum para int ou flutuar para int.O usuário de
static_cast
deve garantir que a conversão seja segura.A conversão no estilo C não executa nenhuma verificação, durante a compilação ou no tempo de execução.
fonte
Como existem muitos tipos diferentes de transmissão, cada um com semântica diferente, o static_cast <> permite que você diga "Estou fazendo uma conversão legal de um tipo para outro", como de int para dobrar. Um elenco simples no estilo C pode significar muitas coisas. Você está escalando para cima / baixo? Você está reinterpretando um ponteiro?
fonte