2010-01-21 15 views
24

En Java, utilizo¿Está garantizada la evaluación de cortocircuito en C++ como en Java?

if (a != null && a.fun()); 

mediante la adopción de todas las ventajas de la evaluación de cortocircuito y la expresión se evalúan de izquierda a derecha?

En C++, ¿puedo hacer lo mismo? ¿Están garantizados para ser portados a través de diferentes plataformas y compiladores?

if (a != 0 && a->fun()); 
+5

Pruebe googlear un poco usted mismo, estoy seguro de que con las palabras clave que ya tiene en la pregunta, habría encontrado la respuesta. Google para 'C++ short-circuit' y probablemente encontrará muchos resultados que responden directamente a su pregunta. –

+6

Probablemente pueda decir lo mismo sobre el 85% de las preguntas formuladas aquí. –

+2

posible duplicado de [¿Hay operadores booleanos en cortocircuito obligatorios en C/C++? Y la orden de evaluación?] (Http://stackoverflow.com/questions/628526/is-short-circuiting-boolean-operators-mandated-in-cc-and-evaluation-order) – jpalecek

Respuesta

36

Sí, se garantiza para el "construido en" tipos. Sin embargo, si sobrecarga & & o || para sus propios tipos, NO se realiza una evaluación en cortocircuito. Por esta razón, la sobrecarga de estos operadores se considera algo malo.

+1

Según mi conocimiento, la razón exacta por la que el operador no está sobrecargando no está en Java. –

+0

@ Thorbjørn: podría ser cierto, pero me parece una locura: Java podría haber permitido la sobrecarga del operador pero no permitió las sobrecargas de esos dos operadores (o el operador ternario?: Que C++ tampoco sobrecarga). Siempre asumí que era debido al argumento "el código que parece local debe ser local", que todo lo que llame al código definido por el usuario debe "parecerse" a que llama fuera de línea, con una llamada a un método explícito. –

+2

La locura está en el ojo del espectador. La sobrecarga tiene algunas desventajas muy distintas, es decir, que no puedes confiar en que ALGO tenga el comportamiento que esperas, es suficiente para que yo piense que Java tuvo este derecho. –

Cuestiones relacionadas