2011-06-28 25 views
6

Ilekroć widzę przykłady unii, zawsze są to różne typy. Na przykład, z MSDN:Związek tego samego typu w 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() 
{ 
} 

Co się dzieje, jeśli mam do związków (w tym przypadku anonimowość, ale to nie powinno mieć znaczenia) jak to:

union 
{ 
    float m_1stVar; 
    float m_1stVarAlternateName; 
}; 

niezależnie od tego czy jest to dobra praktyka czy nie, czy spowoduje to problemy?

+0

Jakie problemy mogą być przyczyną? –

+0

Występuje korupcja sterty, a odpowiedź na to pytanie prowadzi do kolejnego pytania :) ... Chcę wyeliminować wszystkie możliwości. W tym przypadku nie widzę żadnych problemów, ale jak mówią "nigdy nie wiadomo". – Samaursa

+0

Sądzę, że używasz już narzędzi oprócz zwykłej inspekcji kodu? W systemie unix-like valgrind jest niesamowicie przydatny, nie ma pewności co do alternatyw w systemie Windows (http://stackoverflow.com/questions/413477/is-there-a-good-valgrind-substitute-for-windows). Znalezienie korupcji sterty na podstawie inspekcji kodu może być bardzo czasochłonne. –

Odpowiedz

10

Nie, nie spowoduje to żadnych problemów. Powodem, dla którego nie widzisz go częściej, jest to, że nie ma sensu - obie nazwy odnoszą się do tej samej wartości tego samego typu.

+7

To prawda, ale czasami możesz nie wiedzieć, czy typy są takie same (np. Jeśli jeden z nich jest argumentem szablonu). – leftaroundabout

+1

@leftaroundabout, bardzo dobry punkt, którego nie brałem pod uwagę. Dzięki. –

+2

Przykro mi to nekrozy, ale czy można to zarchiwizować? Czy jest gdzieś zdefiniowany? Oczywiście to powinno zadziałać, ale czy to jest gwarancja? – Shaggi

Powiązane problemy