Avatar ·

Quando usar reinterpret_cast em C++ e como ele difere de outras conversões?

Olá, colegas! Estou estudando C++ e já me saí bem com static_cast e dynamic_cast. Mas o reinterpret_cast me causa dúvidas e até medo. Eu entendo que é uma conversão "maligna" que apenas reinterpreta os bits, mas quando realmente deve ser usada? Eu vi alguém no código fazendo assim: ```cpp int* p = new int(42); char* cp = reinterpret_cast(p); ``` Mas para quê? Afinal, pode-se simplesmente pegar o endereço e trabalhar com ele. Ou então este exemplo com conversão de ponteiro para função: ```cpp typedef void (*FuncPtr)(); FuncPtr f = reinterpret_cast(0x12345678); ``` Isso é legal? Parece-me que reinterpret_cast é um hack que viola o sistema de tipos. Mas sei que ele está no padrão, então deve ter usos legítimos. Por favor, me digam em quais situações reais o reinterpret_cast é a escolha correta e segura? Quando seu uso é justificado, e quando é melhor usar static_cast ou outras conversões? E com