Auf den Fersen von a specific problem, eine Selbst-Antwort und Kommentare dazu, würde ich gerne verstehen, wenn es eine richtige Lösung, Workaround/Hack oder einfach nur falsch ist.Strict-Pointer-Aliasing: Ist der Zugriff über einen 'flüchtigen' Zeiger/Verweis auf eine Lösung?
Insbesondere neu geschrieben I-Code:
T x = ...;
if (*reinterpret_cast <int*> (&x) == 0)
...
As:
T x = ...;
if (*reinterpret_cast <volatile int*> (&x) == 0)
...
mit einem volatile
Qualifier auf den Zeiger.
Nehmen wir einfach an, dass die Behandlung T
als int
in meiner Situation sinnvoll ist. Wird durch das Zugreifen über eine volatile
Referenz das Pointer-Aliasing-Problem gelöst?
Für eine Referenz, von der Spezifikation:
[Anmerkung: volatile ist ein Hinweis auf die Umsetzung Einbeziehung des Objekts aggressive Optimierung zu vermeiden, weil der Wert des Objekts könnte mittels nicht nachweisbar durch ein geändert werden Implementierung. Siehe 1.9 für detaillierte Semantik. In der Regel wird die Semantik von flüchtigen soll das gleiche in C sein ++, wie sie in C sind - Endnote]
EDIT:
Der obige Code hat mein Problem zumindest auf GCC lösen 4.5 .
Diese Frage ist ** nicht ** eindeutig C++ spezifisch. Die C++ - artigen Umwandlungen können in C einfach umgeschrieben werden. – curiousguy
@curiousguy C und C++ haben jedoch unterschiedliche Sprachregeln –
@MattMcNabb Wie sind die verschiedenen WRTs "flüchtig"? – curiousguy