Estou pouco confuso com a aplicabilidade do reinterpret_cast
vs static_cast
. Pelo que li, as regras gerais são usar conversão estática quando os tipos podem ser interpretados em tempo de compilação, daí a palavra static
. Esse é o elenco que o compilador C ++ usa internamente também para lançamentos implícitos.
reinterpret_cast
s são aplicáveis em dois cenários:
- converter tipos inteiros em tipos de ponteiros e vice-versa
- converter um tipo de ponteiro para outro. A idéia geral que recebo é que isso não é portável e deve ser evitado.
Onde estou um pouco confuso é um uso que eu preciso, estou chamando C ++ de C e o código C precisa se apegar ao objeto C ++, então basicamente ele contém um void*
. Que elenco deve ser usado para converter entre o void *
tipo e o tipo de classe?
Eu já vi o uso de ambos static_cast
e reinterpret_cast
? Embora pelo que tenho lido, parece que static
é melhor, pois o elenco pode acontecer em tempo de compilação? Embora diga para usar reinterpret_cast
para converter de um tipo de ponteiro para outro?
reinterpret_cast
não acontece no tempo de execução. Ambos são instruções em tempo de compilação. De en.cppreference.com/w/cpp/language/reinterpret_cast : "Diferentemente de static_cast, mas como const_cast, a expressão reinterpret_cast não compila com nenhuma instrução da CPU. É puramente uma diretiva de compilador que instrui o compilador a tratar a sequência de bits (representação de objeto) da expressão como se tivesse o tipo new_type. "