Ho letto più risposte che switch / case evitano confronti "non necessari", ma non l'ho mai imparato all'università, e sono un po 'perplesso su come il programma possa capire a quale caso saltare senza fare un confronto.
Ovviamente, nel caso di int switchVar=3; switch (switchVar) { case 0: ... case 1: ... case 2: ... case 3: ... case n: ... }
, questo sarebbe abbastanza semplice, poiché potrebbe semplicemente creare una serie di puntatori che puntano all'inizio del blocco di codice di ogni caso e farebbe semplicemente qualcosa sulla falsariga di% % co_de.
Tuttavia, ciò si interrompe se si dovesse fare un cambio / caso su una stringa, ad es. instructionPointer = switchJumpTable[switchVar];
dove tentare di accedere all'indice "Nord" di un array causerebbe un errore (o se il compilatore ha permesso questo dietro le quinte, non vedo ancora come eviterebbe i confronti quando converte il char array in un intero in per accedere all'array.)
Posso pensare a un modo per aggirare i confronti non necessari, ma non sarebbe terribilmente efficiente, quindi sono curioso di sapere come questo sia effettivamente fatto, dato che non posso immaginare che i compilatori stiano usando il metodo che ho in mente.