C++0x - Unie

0

Mam dosyć nietypowy problem z uniami.

Jeżeli mamy taką unię:

Kopiuj
 
union skarbiec
{
    char c;
    double pi;

};

i odczytujemy ją tak:

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

To przecież (wg. symfonii standard) instrukcja:

Kopiuj
 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?

edytowany 1x, ostatnio: madmike
CK
  • Rejestracja:ponad 13 lat
  • Ostatnio:około 13 lat
1
MasterBLB
  • Rejestracja:około 19 lat
  • Ostatnio:16 dni
  • Lokalizacja:Warszawa
  • Postów:1454
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.


"Sugeruję wyobrazić sobie Słońce widziane z orbity Merkurego, a następnie dupę tej wielkości. W takiej właśnie dupie specjalista ma teksty o wspaniałej atmosferze, pracy pełnej wyzwań i tworzeniu innowacyjnych rozwiązań. Pracuje się po to, żeby zarabiać, a z resztą specjalista sobie poradzi we własnym zakresie, nawet jeśli firma mieści się w okopie na granicy obu Korei."
-somekind,
konkretny człowiek-konkretny przekaz :]
edytowany 1x, ostatnio: MasterBLB

Zarejestruj się i dołącz do największej społeczności programistów w Polsce.

Otrzymaj wsparcie, dziel się wiedzą i rozwijaj swoje umiejętności z najlepszymi.