Kann Aliasing-Probleme mit const-Variablen vermieden werden

Meine Firma verwendet einen Nachrichtenserver, der eine Nachricht in ein @ abrufconst char* und wandelt es dann in den Nachrichtentyp um.

Ich habe darüber nach der Frage besorgt gewordendiese Frag. Mir ist kein schlechtes Verhalten auf dem Nachrichtenserver bekannt. Ist es möglich dassconst -Variablen verursachen keine Aliasing-Probleme?

Zum Beispiel sagen, dass foo in @ definiert iMessageServer auf eine der folgenden Arten:

Als Parameter:void MessageServer(const char* foo)Oder als const-Variable am oberen Rand vonMessageServer: const char* foo = PopMessage();

JetztMessageServer ist eine riesige Funktion, aber es weist @ nie etwas foo, jedoch an 1 Punkt inMessageServer 's Logikfoo werde auf den ausgewählten Nachrichtentyp umgewandelt werden.

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

bar wird nur von später gelesen, aber ausgiebig für die Objekteinrichtung verwendet.

Ist hier ein Aliasing-Problem möglich oder ist die Tatsache, dassfoo wird nur initialisiert und nie geändert, um mich zu retten?

BEARBEITEN

Jarod42 Antwort findet kein Problem mit dem Casting von einemconst char* zu einerMessageJ*, aber ich bin mir nicht sicher, ob das Sinn macht.

Wir wissen, dass dies illegal ist:

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

Sagen wir, das macht es irgendwie legal?

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

Mein Verständnis von Jarod42 Antwort ist das die Besetzung vontemp macht es legal.

BEARBEITEN

Ich habe einige Kommentare zu Serialisierung, Ausrichtung, Netzwerkübergabe usw. erhalten. Darum geht es in dieser Frage nicht.

Dies ist eine Frage zustrict aliasing.

Strict Aliasing ist eine Annahme des C- (oder C ++) - Compilers, dass die Dereferenzierung von Zeigern auf Objekte unterschiedlichen Typs niemals auf denselben Speicherort (d. H. Alias) verweist.

as ich frage, ist:Wird die Initialisierung einesconst Objekt, durch Casting von einemchar*, jemals weiter unten optimiert, wo dieses Objekt in einen anderen Objekttyp umgewandelt wird, sodass ich es aus nicht initialisierten Daten umwandle?

Antworten auf die Frage(10)

Ihre Antwort auf die Frage