2012-07-15 12 views

risposta

10

No, va bene. Non creerebbe un comportamento indefinito in questo codice. Cambierete il valore di a o b a 5, a seconda delle condizioni.

8

Questo è assolutamente bene, a patto che entrambi i lati della condizionale sono espressioni che possono essere utilizzati per inizializzare un riferimento (ad esempio variabili, dereferenziazioni di puntatori, ecc)

float& x = some_condition()? a : *(&b); // This is OK - it is the same as your code 
float& x = some_condition()? a : b+1; // This will not compile, because you cannot take reference of b+1 
+0

Beh, l'incapacità di compilare è un comportamento perfettamente definito, non è vero? –

+0

Probabilmente, sì, un programma mal formato mostra un comportamento definito: niente. – Puppy

+1

Errore veloce, errore precoce. –