¿Se pueden evitar los problemas de aliasing con variables constantes?

Mi empresa utiliza un servidor de mensajería que envía un mensaje a unconst char* y luego lo convierte al tipo de mensaje.

Me he preocupado por esto después de preguntaresta pregunta. No conozco ningún mal comportamiento en el servidor de mensajería. Es posible queconst las variables no generan problemas de alias?

Por ejemplo, digamos que foo se define enMessageServer de una de estas maneras:

Como parámetro:void MessageServer(const char* foo)O como variable constante en la parte superior deMessageServer: const char* foo = PopMessage();

AhoraMessageServer es una función enorme, pero nunca asigna nada afoo, sin embargo en 1 punto enMessageServerla lógicafoo será ser enviado al tipo de mensaje seleccionado.

auto bar = reinterpret_cast<const MessageJ*>(foo);

bar solo se leerá posteriormente, pero se usará ampliamente para la configuración de objetos.

¿Es posible aquí un problema de alias o el hecho de quefoo solo se inicializa y nunca se modifica ¿salvarme?

EDITAR:

La respuesta de Jarod42 no encuentra ningún problema con el envío desde unconst char* a unMessageJ*, pero no estoy seguro de que esto tenga sentido.

Sabemos que esto es ilegal:

MessageX* foo = new MessageX;
const auto bar = reinterpret_cast<MessageJ*>(foo);

¿Estamos diciendo que esto de alguna manera lo hace legal?

MessageX* foo = new MessageX;
const auto temp = reinterpret_cast<char*>(foo);
auto bar = reinterpret_cast<const MessageJ*>(temp);

Mi comprensión deLa respuesta de Jarod42 es que el elenco detemp lo hace legal

EDITAR:

He recibido algunos comentarios en relación con la serialización, la alineación, el paso de la red, etc. De eso no se trata esta pregunta.

Esta es una pregunta sobrealias estricto.

El alias estricto es una suposición, hecha por el compilador de C (o C ++), de que desreferenciar los punteros a objetos de diferentes tipos nunca se referirá a la misma ubicación de memoria (es decir, alias entre sí).

Lo que pregunto es:Será la inicialización de unconst objeto, emitiendo desde unchar*, ¿alguna vez se optimizó a continuación donde ese objeto se convierte a otro tipo de objeto, de modo que estoy enviando datos no inicializados?

Respuestas a la pregunta(5)

Su respuesta a la pregunta