@wytrzzeszcz: ja tego użyłem raz w życiu do wysyłania floata w 4 "paczkach" po 8 bitów i właśnie się zastanawiam, czy ktokolwiek znalazł jakieś inne zastosowanie.
@Analityk: jeżeli zależy od maszyny, to undefined behaviour, acz może na jakiejś konkretnej być zdefiniowane rzecz jasna. Tu problem o tyle, że wiążesz się sztywno z kompilatorem, platformą lub biblioteką. Czy takie jest? W obrębie pewnej umowy/określonych warunków dowolne może być (patrz powszechny przykład: serializacja lub I/O, wszelkie protokoły).
@that_ugly_dude: ten przykład to tylko przykład, w zasadzie mógłbym utworzyć wskaźnik i przydzielić im tyle pamięci, ile ma określony typ. Typy są znane w czasie kompilacji więc to nie jest problem. Czy wiąże się sztywno z architekturą i kompilatorem? Oczywiście. Na avr mam avr_g++ od atmela i nawet mi się nie śni, żeby to zmieniać.
@CichyGlosZTyluGlowy: variant się liczy ? Sens był taki, że potrzebowałem rozszerzyć obiekt o klucze do tabel: - id - 2 id - id + date. ... Poliformizmu (dynamicznych alokacji) nie mogłem użyć, bo trzeba to było osadzić w legacy code, gdzie lecą memcpy i memsety.
albo... coś do jakiejś magi gdzie grzebiemy w pamięci
union { uint8_t raw[4], double d } cast; np.
Czy wiąże się sztywno z architekturą i kompilatorem? Oczywiście. Na avr mam avr_g++ od atmela i nawet mi się nie śni, żeby to zmieniać.
- id
- 2 id
- id + date.
...
Poliformizmu (dynamicznych alokacji) nie mogłem użyć, bo trzeba to było osadzić w legacy code, gdzie lecą memcpy i memsety.