2010-01-21 11 views
24

In Java, io usoLa valutazione del cortocircuito è garantita in C++ come in Java?

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

attraverso la piena utilizzazione della valutazione di corto circuito e di espressione vengono valutati da sinistra a destra?

In C++, posso fare lo stesso? Garantiscono la portabilità su diverse piattaforme e compilatori?

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

Prova a googling un po 'te stesso, sono sicuro che con le parole chiave che hai già nella domanda avresti trovato la risposta. Google per 'C++ corto-circuito' e probabilmente troverai molti risultati che rispondono direttamente alla tua domanda. –

+6

Probabilmente si potrebbe dire la stessa cosa circa l'85% delle domande poste qui. –

+2

possibile duplicato di [È necessario eseguire il booleano degli operatori booleani in C/C++? E l'ordine di valutazione?] (Http://stackoverflow.com/questions/628526/is-short-circuiting-boolean-operators-mandated-in-cc-and-evaluation-order) – jpalecek

risposta

36

Sì, è garantito per il "costruito in" tipi. Tuttavia, se sovraccarichi & & o || per i propri tipi, NON viene eseguita la valutazione in cortocircuito. Per questo motivo, sovraccaricare questi operatori è considerato una cosa negativa.

+1

Questo è a mio avviso il motivo esatto per cui l'overloading dell'operatore non è in Java. –

+0

@ Thorbjørn: potrebbe essere vero, ma suona matto per me - Java avrebbe potuto consentire il sovraccarico dell'operatore ma non il sovraccarico consentito di questi due operatori (o dell'operatore ternario?: Che C++ non sovraccarico). Ho sempre pensato che fosse dovuto all'argomento "codice che sembra locale dovrebbe essere locale", che qualsiasi cosa che chiama il codice definito dall'utente dovrebbe "assomigliare" alle chiamate fuori linea, con una chiamata al metodo esplicita. –

+2

La follia è negli occhi di chi guarda. Il sovraccarico ha alcuni svantaggi ben distinti, vale a dire che non ci si può fidare di NESSUNO per avere il comportamento che ci si aspetta, è abbastanza per me pensare che Java abbia ragione. –

Problemi correlati