Mam taki kod:
#include <iostream>
using namespace std;
union UniVar
{
char c;
short s;
int i;
long l;
float f;
double d;
long double ld;
};
int main()
{
cout << "sizeof(UniVar): " << sizeof(UniVar) << endl;
cout << "sizeof(long double): " << sizeof(long double) << endl << endl;
return 0;
}
Teraz do rzeczy. Jak widać kod pokazuje nam, ile miejsca w pamięci zajmuje zmienna typu UniVar, a ile long double (poprawniej chyba będzie użyć sformułowania rozmiar w odniesieniu do wielokrotności miejsca zajmowanego przez typ char, ale ten, z tego co mi wiadomo w 100% przypadków zajmuje dokładnie jeden bajt). Obie wartości (teoretycznie) powinny być równe, bo zgodnie z definicją wielkość unii jest równa wielkości największego typu, będącego elementem danej struktury. Teoretycznie.
Testowałem kod na Ideone.com, wszystko jest tak, jak być powinno: http://ideone.com/Ex1WC , czyli:
sizeof(UniVar)==sizeof(long double) //true
Ciekawostka powstała mi po skompilowaniu tego w środowisku Code::Blocks, otóż tam rozmiary obu typów są różne. Rozmiar typu reprezentowanego przez unię jest większy niż powinien być. Poniżej screen.
Może ktoś to wyjaśnić ? Może o czymś nie wiem :)