2011-06-28 77 views
6

每当我看到联合的例子时,它们总是不同的类型。例如,从MSDN:C++中同一类型的联盟

// 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

您认为这可能会导致什么问题? –

+0

我越来越堆腐败,这个问题的答案将导致另一个问题:) ...我想消除所有的可能性。在这种情况下,我没有看到任何问题,但他们说'你永远不知道'。 – Samaursa

+0

我想,除了单纯的代码检查之外,您已经使用了一些工具?关于unix-like valgrind是非常有用的,不确定在Windows上的替代品(http://stackoverflow.com/questions/413477/is-there-a-good-valgrind-substitute-for-windows)。通过代码检查查找堆损坏可能非常耗时。 –

回答

10

不,这不会引起任何问题。你不经常看到它的原因是它没有意义 - 两个名称都指向相同类型的相同值。

+7

确实如此,但有时您可能不知道类型是否相同(如其中一个是模板参数)。 – leftaroundabout

+1

@leftaroundabout,我没有考虑的很好的一点。谢谢。 –

+2

对不起,这可以备份吗?它是在什么地方定义的?显然它应该工作,但它是_guaranteed_? – Shaggi