Скажем, мы имеем
enum E
{
Foo = 0,
Bar = 1
};
Теперь мы делаем
enum E v = ( enum E ) 2;
И затем
switch ( v )
{
case Foo:
doFoo();
break;
case Bar:
doBar();
break;
default:
// Is the compiler required to honor this?
doOther();
break;
}
Так как переключатель выше обрабатывает все возможные перечисленные значения перечисления, разрешено ли компилятору оптимизировать ветвь default
выше или иначе иметь неуказанное или undefined поведение в случае, когда значение перечисления равно не в списке?
Поскольку я ожидаю, что поведение должно быть схожим для C и С++, вопрос касается обоих языков. Однако, если есть разница между C и С++ для этого случая, было бы неплохо узнать об этом.