5

Ho letto su StackOverflow che l'utilizzo diL'interruttore è così grave come se?

if(someCondition) 
{ 
    someCode(); 
} 
else 
{ 
    alternateCode(); 
} 

può essere inefficiente a causa della suscettibilità al ramo misprediction (vedi this question per esempio).

Quindi è un -construct switch, per esempio,

switch (someCondition) 
{ 
    case (someCase): 
     something(); 
     break; 
    case (otherCase): 
     someOtherInstructions(); 
     break; 
    default: 
     defaultAction(); 
     break; 
} 

diverso a questo proposito (oltre al fatto che ho lasciato per tre possibilità)?

+6

Questa è una definizione molto rara di "costoso"! È come dire che $ 0,0001 è costoso. – Gabe

+1

@Gabe: come sempre, dipende dall'applicazione. Se hai bisogno di spendere $ 0,0001 diversi miliardi di volte, inizia a essere importante (anche se sono d'accordo che la maggior parte del costo non costa quasi mai). –

+0

@RodyOldenhuis: +1 – nobalG

risposta

4

if le dichiarazioni non sono "costose", possono essere i rami condizionali. Il problema non è quale delle molte diverse istruzioni di alto livello che si sceglie di scrivere - if, switch, for, while, ecc.. Il problema è che i computer moderni funzionano molto bene eseguendo un percorso di istruzioni incondizionato, ma quando c'è un punto di decisione, possono rallentare. Dal momento che non puoi fare nulla di interessante nel calcolo senza punti decisionali (, ovvero, rami condizionali), potresti anche ignorare la scelta del costrutto linguistico di alto livello.

+2

Le istruzioni switch non sono necessariamente compilate su rami condizionali (si pensi alle tabelle di salto). – sepp2k

+1

Immagino che il punto principale qui sia, non ti preoccupare se non stai eseguendo un pezzo di codice migliaia (o milioni) di volte ... –

+0

@ sepp2k Concordato. Ma questa è una decisione del compilatore e può dipendere dai valori specifici coinvolti. Indipendentemente da ciò, il punto non è "se contro switch", è "previsione di ramo condizionale". –