C++0x - Unie

0

Mam dosyć nietypowy problem z uniami.

Jeżeli mamy taką unię:

 
union skarbiec
{
    char c;
    double pi;

};

i odczytujemy ją tak:

 skarbiec moj = {'z'};
skarbiec twoj = {'a'};
skarbiec jego = {3.14};
}

To przecież (wg. symfonii standard) instrukcja:

 skarbiec jego = {3.14};

powinna być przez kompilator odrzucona bo " pierwszy składnik jest typu char".

Nie do końca rozumiem o co chodzi w tych całych uniach.
Możemy tam do JEDNEGO składnika przypisać jakąś wartość a do innego już nie? Nie rozumiem tego... mnie się to kompiluje (używam Code::Blocks)... nie wiem może wg. starego standardu nie powinno a C++0x już na to pozwala?

1

Mylisz unię ze strukturą. http://cpp0x.pl/kursy/Kurs-C++/Unia-w-C++/314

1

W uniach chodzi o wygodę.
Załóżmy że zrobiłeś sobie tablicę o wielkości np 10 bajtów char table[10].Na 10 bajtach zmieści się typ i char,i short,int,float i double też,ale za każdym razem czeka cię zabawa z rzutowaniem wskaźnika do tej tablicy jeśli chcesz tam wsadzić coś innego niż char.
Unia łyka bez dąsów wszystko,co zadeklarujesz i sama się martwi o to,żeby to wsadzić pod właściwy adres.Miej jednak na uwadze,że wciąż gdzieś pod spodem siedzi ta jedna i tylko jedna tablica (o wielkości największego typu zadeklarowanego,w twoim wypadku jest to sizeof(double)) która przechowuje ostatnią wpisaną daną + śmieci z poprzednich zapisów.

1 użytkowników online, w tym zalogowanych: 0, gości: 1