2012-10-06 15 views
8

ho due domande - (I)uso di "else if" in C++

code-fragment-1 

if(<condition-statement>){ 
} 

else if(<condition-statement-2>){ 
    //statements-1 
} 
//statements-2 

codice-frammento-2

if(<condition-statement>){ 
} 

else{ 
    if(<condition-statement-2>){ 
     //statements-1 
    } 
    //statements-2 
} 

Sono questi due frammenti di codice stesso?

(II) quando sono usati ifs (in C++)?

risposta

9

L'unica differenza è nell'esempio 1 che l'istruzione2 verrà eseguita indipendentemente dalle condizioni controllate. Nell'esempio 2, Statement2 verrà eseguito solo se la condizione if è falsa. Oltre a questo, sono praticamente uguali.

8

No, nel primo caso si esegue il blocco else solo se il <condition-statement>non è verificato E solo se<condition-statement-2>è verificata.

Nel secondo caso si esegue il blocco else semplicemente se <codition-statement> è non verificato.

In questo caso sono equivalenti fino voi non avete // istruzioni-2.

Informazioni sulla domanda: quando viene utilizzato il else if (in C++)?

Viene utilizzato fondamentalmente nelle stesse condizioni di tutte le altre lingue che hanno questo costrutto. else viene eseguito in alternativa al relativo se, else-if viene eseguito come alternativo ma con un 'allegato' if da verificare, altrimenti non viene eseguito. Quindi non sono equivalenti logicamente.

3

la sintassi di un if è davvero se (condizione) istruzione;

Ciò che {} realmente fa è consentire di raggruppare più istruzioni. Nel tuo secondo esempio hai solo un'istruzione (i if) all'interno dei tuoi {} s, quindi sì, entrambi gli esempi sono uguali, eccetto // istruzioni-2 viene sempre eseguito quando! = True

1

Nel tuo primo esempio di codice , statement-2 viene eseguito incondizionatamente. Nel secondo è condizionale. Non lo stesso.

'else if' è generalmente da preferire, perché è possibile continuare ad inserirli o aggiungerne altri a tempo indefinito, o aggiungere un 'else', mentre con l'altro modulo è necessario gettare all'infinito tra parentesi graffe per ottenere lo stesso effetto e rischi di alterare la semantica, come del resto hai fatto nel tuo secondo campione.

+0

un'istruzione switch deve sempre preferire a più rami "else if" o mi viene un'idea sbagliata – clockw0rk