Gemäß der C11-Spezifikation wird der Zugriff auf eine flüchtige Komponente als Nebeneffekt betrachtet, und daher sollte der Compiler den (ansonsten nutzlosen) Zugriff in Ihrem Beispiel nicht optimieren.
Also, die Antwort ist, dass ja, es sollte aus dem Speicher lesen.
Siehe C11-Standard (Entwurf), Abschnitt 5.1.2.3 Abschnitt 2:
ein flüchtiges Objekt Zugriff auf ein Objekt zu modifizieren, um eine Datei zu modifizieren, oder Aufruf eine Funktion, die alle eine dieser Operationen tut ist Seite Effekte, die Änderungen im Zustand der Ausführung sind Umgebung. Die Auswertung eines Ausdrucks umfasst im Allgemeinen sowohl Wertberechnungen als auch die Einleitung von Nebenwirkungen. Die Wertberechnung für einen lvalue-Ausdruck umfasst das Bestimmen der Identität des angegebenen Objekts .
Ferner 4 sagt:
In der abstrakten Maschine sind alle Ausdrücke, die durch die Semantik wie angegeben bewertet. Eine tatsächliche Implementierung braucht keinen Teil eines Ausdrucks auszuwerten, wenn sie daraus ableiten kann, dass ihr Wert nicht verwendet wird und dass keine erforderlichen Nebenwirkungen erzeugt werden (einschließlich aller durch Aufruf einer -Funktion oder Zugriff auf ein flüchtiges Objekt).
'alle Ausdrücke werden wie von der Semantik angegeben ausgewertet' klingt wie eine einzelne Ausdruckanweisung muss noch ausgewertet werden, auch wenn das Ergebnis nie irgendwo hin geht. – dronus
Noch in Frage, wenn ein Lesezugriff als Nebeneffekt betrachtet wird. – dronus
@dronus, was? "Zugriff auf ein flüchtiges Objekt ... [ist ein] Nebeneffekt" Scheint ziemlich klar. – sinelaw