¿Por qué tenemos reinterpret_cast en C ++ cuando dos static_cast encadenados pueden hacer su trabajo?

Di que quiero lanzarA* achar* y viceversa, tenemos dos opciones (quiero decir, muchos de nosotros pensamos que tenemos dos opciones,porqu ambos parece funcionar! De ahí la confusión!):

struct A
{
    int age;
    char name[128];
};

A a;
char *buffer = static_cast<char*>(static_cast<void*>(&a)); //choice 1
char *buffer = reinterpret_cast<char*>(&a); //choice 2

Ambos funcionan bien.

//convert back
A *pA = static_cast<A*>(static_cast<void*>(buffer)); //choice 1
A *pA = reinterpret_cast<A*>(buffer); //choice 2

¡Incluso esto funciona bien!

Entonces, ¿por qué tenemosreinterpret_cast en C ++ cuandotwo encadenado static_cast@ puede hacer su trabajo?

Algunos de ustedes podrían pensar que este tema es un duplicado de los temas anteriores, como se enumera al final de esta publicación, pero no lo es. Esos temas se discuten solo teóricamente, pero ninguno de ellos da ni un solo ejemplo que demuestre por quéreintepret_cast es realmente necesario ydo static_cast haríasegurament fallar. Estoy de acuerdo, un static_cast fallaría. ¿Pero qué tal dos?

Si la sintaxis de dos encadenadosstatic_cast parece engorroso, entonces podemos escribir una plantilla de función para que sea más fácil de programar:

template<class To, class From>
To any_cast(From v)
{
    return static_cast<To>(static_cast<void*>(v));
}

Y entonces podemos usar esto, como:

char *buffer = any_cast<char*>(&a); //choice 1
char *buffer = reinterpret_cast<char*>(&a); //choice 2

//convert back
A *pA = any_cast<A*>(buffer); //choice 1
A *pA = reinterpret_cast<A*>(buffer); //choice 2

También, mira esta situación dondeany_cast puede ser útil: Corrección adecuada para las funciones de miembro de lectura y escritura de fstream.

Así que mi pregunta es básicamente,

¿Por qué tenemosreinterpret_cast en C ++? Por favor, muéstrame incluso un solo ejemplo dondetwo encadenado static_cast seguramente no podría hacer el mismo trabajo? Qué yeso usar; static_cast o reinterpret_cast?Cast de Void * a TYPE *: static_cast o reinterpret_cast

Respuestas a la pregunta(7)

Su respuesta a la pregunta