Angenommen, wir folgenden Code haben:C++ switch-Anweisung Auswertung
switch (currentChar) {
case 'G':
case 'T':
case 'M':
case ';':
case '\r':
case '\n':
doSomething();
break;
}
Wenn die erste Bedingung erfüllt ist (currentChar == 'G'
) werden auch die folgenden Fälle verglichen, oder springt das Programm direkt auf doSomething()
?
Was wäre schneller auszuführen: der Schalter-Fall, oder ein mit ||
Operator?
Klarstellung: I doSomething
ausgeführt werden soll, wenn eine der Bedingungen erfüllt ist. Ich weiß auch, dass der "G" -Fall in etwa 99% aller Fälle auftreten wird. Kann ich davon ausgehen, dass es als erstes verglichen wird, wenn ich es auf die Liste setze?
Folgende Anweisungen werden ebenfalls ausgewertet, bis sie eine Anweisung 'break;' erfüllen oder von der switch-Anweisung abfallen. –
Es ist nicht klar, was Sie fragen. Die Fälle sind konstante Ausdrücke, und es macht keinen Unterschied, ob diese konstanten Ausdrücke ausgewertet werden. Fragen Sie, ob 'currentChar' mit diesen Fallwerten verglichen wird? Fragen Sie, ob 'doSomething()' ausgewertet wird? Oder fragst du etwas anderes? – hvd
Sie können jeden Weg testen und selbst herausfinden. Im Allgemeinen Wie schnell sind Fragen zu weit, da sie von vielen verschiedenen Faktoren abhängen können. – NathanOliver