Strict Pointer Aliasing: Ist der Zugriff über einen 'flüchtigen' Zeiger / Verweis eine Lösung?
uf den Fersen v ein spezifisches Problem, eine Selbstantwort und Kommentare dazu, ich würde gerne verstehen, ob es sich um eine richtige Lösung handelt, um einen Workaround / Hack oder einfach nur falsch.
Insbesondere habe ich Code umgeschrieben:
T x = ...;
if (*reinterpret_cast <int*> (&x) == 0)
...
Wie
T x = ...;
if (*reinterpret_cast <volatile int*> (&x) == 0)
...
mit einervolatile
Qualifier auf den Zeiger.
Lassen Sie uns einfach annehmen, dass die Behandlung vonT
wieint
in meiner Situation macht Sinn. Geht dies über einvolatile
Referenz Zeiger-Aliasing-Problem lösen?
Für eine Referenz aus der Spezifikation:
[Hinweis: Volatile ist ein Hinweis auf die Implementierung, um eine aggressive Optimierung des Objekts zu vermeiden, da der Wert des Objekts möglicherweise von einer Implementierung nicht erkannt werden kann. Ausführliche Informationen zur Semantik finden Sie unter 1.9. Im Allgemeinen soll die Semantik von volatile in C ++ dieselbe sein wie in C. - Endnote]
BEARBEITEN
Der obige Code hat mein Problem zumindest in GCC 4.5 gelöst.