Betrachten Sie die folgende Struktur:Wird inaktives Union-Mitglied des gleichen Typs wie aktiv gelesen?
struct vec4
{
union{float x; float r; float s};
union{float y; float g; float t};
union{float z; float b; float p};
union{float w; float a; float q};
};
Etwas Ähnliches scheint in Beispiel verwendet werden, GLM zu GLSL-ähnlichen Typen wie vec4
, vec2
etc .. bieten
Aber obwohl die beabsichtigte Verwendung wie ist dies möglich
vec4 a(1,2,4,7);
a.x=7;
a.b=a.r;
zu machen, so scheint es, ein nicht definiertes Verhalten zu sein, weil, wie here zitiert ,
In einer Union kann höchstens einer der Datenmitglieder zu jeder Zeit aktiv sein, dh der Wert von höchstens einem der Datenmitglieder kann jederzeit in einer Union gespeichert werden.
Wäre es nicht besser, z.B. Verwenden Sie einfach die Struktur so etwas wie folgt definieren?
struct vec4
{
float x,y,z,w;
float &r,&g,&b,&a;
float &s,&t,&p,&q;
vec4(float X,float Y,float Z,float W)
:x(X),y(Y),z(Z),w(W),
r(x),g(y),b(z),a(w),
s(x),t(y),p(z),q(w)
{}
vec4()
:r(x),g(y),b(z),a(w),
s(x),t(y),p(z),q(w)
{}
vec4(const vec4& rhs)
:x(rhs.x),y(rhs.y),z(rhs.z),w(rhs.w),
r(x),g(y),b(z),a(w),
s(x),t(y),p(z),q(w)
{}
vec4& operator=(const vec4& rhs)
{
x=rhs.x;
y=rhs.y;
z=rhs.z;
w=rhs.w;
return *this;
}
};
Oder arbeite ich um ein nicht existierendes Problem? Gibt es vielleicht eine spezielle Erklärung, die den Zugang zu in gleicher Weise getippten inaktiven Gewerkschaftsmitgliedern ermöglicht?
[Verwandte] (http://stackoverflow.com/questions/6512710/union-of-same-type-in-c) –