В листинге 6.11 иллюстрируется применение enum для определения набора взаимосвязанных констант в операторе switch.
В общем случае входной поток cin не распознает перечислимые типы (он не может знать, как вы определите их), поэтому программа читает выбор как int.
Когда оператор switch сравнивает значение int с перечислимой меткой case, он приводит перечисление к типу int. Точно также перечисления приводятся к int в проверочном условии цикла while.
case orange: cout << "Her hair was orange.\n"; break;
case yellow: cout << "Her shoes were yellow.\n"; break;
case green: cout << "Her nails were green.\n"; break;
case blue: cout << "Her sweatsuit was blue.\n"; break;
case violet: cout << "Her eyes were violet.\n"; break;
case indigo: cout << "Her mood was indigo.\n"; break;
}
cout << "Enter color code (0-6): ";
cin >> code;
}
cout << "Bye\n";
getchar();
getchar();
return 0;
}
Оба оператора — switch и if else — позволяют выбирать из списка альтернатив. Однако if else из них является более гибким оператором. Например, он позволяет обрабатывать диапазоны, как показано в следующем примере:
В отличие от этого, оператор switch не позволяет обрабатывать диапазоны. Каждая метка case оператора switch должна быть представлена одиночным значением. К тому же значение должно быть целым (что включает char), поэтому оператор switch не может проверять значения с плавающей точкой. К тому же значение метки case должно быть константой. Если вам необходимо проверять диапазоны, выполнять проверку значений с плавающей точкой или сравнивать две переменные, то вам следует использовать if else.
Если же, однако, все альтернативы могут быть идентифицированы целочисленными константами, то вы можете применять как switch, так и if else. А поскольку это та ситуация, для обработки которой специально был спроектирован оператор switch, его применение в этом случае более эффективно в смысле размера кода и скорости выполнения, если только речь не идет всего о паре возможных альтернатив выбора.
Если в конкретном случае можно использовать либо оператор switch,либо последовательность if else if,то обычная практика состоит в применении switch,когда имеется три или более альтернатив.