Questo codice è ben definito?Assegnazione tra membri del sindacato
int main()
{
union
{
int i;
float f;
} u;
u.f = 5.0;
u.i = u.f; // ?????
}
accede due diversi membri del sindacato in un'espressione così mi chiedo se cade fallo dei [class.union]/1 Disposizioni circa membro attivo di un sindacato.
Lo standard C++ sembra sottodescrivare quali operazioni modificano il membro attivo per i tipi built-in e cosa succede se un membro inattivo viene letto o scritto.
Non il secondo compito renderebbe 'u.i' il membro attivo e' u.f' un membro inattivo? –
No: se una funzione viene dichiarata per restituire un valore, ma non lo fa, è un comportamento indefinito (scherzo, presumo tu stia parlando dell'assegnazione 'union'). – Tas
Direi che, poiché il calcolo del valore di 'u.f' è sequenziato prima dell'effetto collaterale dell'assegnazione, in nessun momento nel tempo è ambiguo quale membro è attivo e in nessun momento nel tempo viene letto un membro inattivo. L'istruzione in questione dovrebbe comportarsi come 'auto temp = u.f; ui = temp; ' –