2012-07-15 5 views

Antwort

10

Nein, es ist in Ordnung. Es würde in diesem Code kein undefiniertes Verhalten erzeugen. Sie ändern nur den Wert von a oder b in 5, je nach Bedingung.

8

Das ist absolut in Ordnung, solange beide Seiten der bedingten sind Ausdrücke, die verwendet werden können, eine Referenz (zB Variablen, Zeiger dereferenziert, usw.) zu initialisieren

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

Gut, Unfähigkeit zu kompilieren ist ein perfekt definiertes Verhalten, nicht wahr? –

+0

Wohl, ja - ein schlecht geformtes Programm zeigt definiertes Verhalten - nichts. – Puppy

+1

Fail schnell, scheitern früh. –

Verwandte Themen