2012-07-15 18 views

Respuesta

10

No, está bien. No crearía un comportamiento indefinido en este código. Simplemente cambiará el valor de aob a 5, de acuerdo con la condición.

8

Esto es absolutamente bien, siempre y cuando ambos lados de la condicional son expresiones que se pueden utilizar para inicializar una referencia (por ejemplo, variables, desreferencias puntero, etc.)

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

Bueno, la incapacidad de compilar es un comportamiento perfectamente definido, ¿no? –

+0

Discutible, sí, un programa mal formado exhibe un comportamiento definido, nada. – Puppy

+1

Falló rápido, falló temprano. –

Cuestiones relacionadas