C ++中同类型的联合

时间:2011-06-28 20:31:16

标签: c++ unions

每当我看到联合的例子时,它们总是不同的类型。例如,来自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;
};

无论这是否是好的做法,这会导致任何问题吗?

3 个答案:

答案 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)

仅当您想要两个变量具有唯一值时,才会出现问题。在您的用例中,它应该可以正常工作。