2011-06-28 114 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