Struktur in ein Array umwandeln [duplizieren]

Diese Frage hat hier bereits eine Antwort:

Verstößt der Zugriff auf das erste Feld einer Struktur über einen C-Cast gegen das strikte Aliasing? 1 AntwortStruktur mit Elementen des gleichen Typs wie ein Array auf standardkonforme Weise neu interpretieren [duplizieren] 5 Antworten

Dies ist eine strikte Aliasing-Frage, da der Compiler hierdurch Probleme mit der Optimierungsreihenfolge verursacht.

Sag, dass ich drei öffentlichefloats in einemstruct XMFLOAT3 (nicht unähnlichdiese.) Und ich möchte zu einemfloat*. Wird mich das in Optimierungsschwierigkeiten bringen?

XMFLOAT3 foo = {1.0f, 2.0f, 3.0f};
auto bar = &foo.x;

bar[2] += 5.0f;
foo.z += 5.0f;
cout << foo.z;

Ich nehme an, dies wird immer "13" ausgeben. Aber was ist mit diesem Code:

XMFLOAT3 foo = {1.0f, 2.0f, 3.0f};
auto bar = reinterpret_cast<float*>(&foo);

bar[2] += 5.0f;
foo.z += 5.0f;
cout << foo.z;

Ich glaube, das ist legal, weil nachhttp: //en.cppreference.com/w/cpp/language/reinterpret_cast#Type_aliasin

T2 ist ein Aggregattyp oder ein Vereinigungstyp, der einen der oben genannten Typen als Element oder nicht statisches Element enthält (einschließlich rekursiver Elemente von Unteraggregaten und nicht statischen Datenelementen der enthaltenen Vereinigungen) wird vom ersten Mitglied einer Struktur und von einem Element einer Vereinigung in die Struktur / Vereinigung umgewandelt, die sie enthält.

st mein Verständnis dafür korrek

Offensichtlich wird dies von der Deklaration von @ abhängiXMFLOAT3.

Antworten auf die Frage(6)

Ihre Antwort auf die Frage