每当我看到联合的例子时,它们总是不同的类型。例如,来自MSDN:
// declaring_a_union.cpp
union DATATYPE // Declare union type
{
char ch;
int i;
long l;
float f;
double d;
} var1; // Optional declaration of union variable
int main()
{
}
如果我有一个联盟(在这种情况下是匿名的,但这不重要)会发生什么呢?
union
{
float m_1stVar;
float m_1stVarAlternateName;
};
无论这是否是好的做法,这会导致任何问题吗?
答案 0 :(得分:10)
不,这不会导致任何问题。你没有经常看到它的原因是它没有意义 - 两个名称都指的是相同类型的相同值。
答案 1 :(得分:1)
这是合法的,并且在您具有不同上下文的情况下(非常适合使用不同名称)非常有用。以一个四成员向量vec4
类型为例(类似于您在GLSL中找到的类型):
vec4 v(1., 1., 1., 1.);
// 1. Access as spatial coordinates
v.x;
v.y;
v.z;
v.w;
// 2. Access as color coordinates (red, green, blue, alpha)
v.r;
v.g;
v.b;
v.a;
// 3 Access as texture coordinates
v.s;
v.t;
v.p;
v.q;
一个vec4可能只有四个相同类型的成员,但是根据上下文,您将使用不同的名称来引用相同的对象。
答案 2 :(得分:0)
仅当您想要两个变量具有唯一值时,才会出现问题。在您的用例中,它应该可以正常工作。