Или другой способ выразить это: может ли компилятор предположить, что экземпляр enum
может содержать только те значения, которые он объявляет удерживать и оптимизировать на основе этого предположения?Разрешено ли компилятору оптимизировать ветку, зависящую от перечисления, имеющего необъявленное значение?
enum MyType { A = 1, B = 2 };
const MyType C = static_cast<MyType>(3);
void fun(MyType m) {
switch (m) {
case A:
// ...
break;
case B:
// ...
break;
case C:
// can this be optimized away?
}
}
Непонятно, что вы спрашиваете? Почему должен быть оптимизирован случай 'C'? Я не вижу ясных аргументов в пользу этого. –
@ πάνταῥεῖ, потому что он не включен в список для 'MyType'. 'g ++' по крайней мере предупреждает об этом значении '3 'не в перечисляемом типе« MyType » –
@RyanHaining Конечно, это наименьшая из ваших проблем, если вы выполняете' const MyType C = static_cast (value) '? Например, обновите свое резюме и подадите в суд для изменения юридического имени, чтобы ваши сотрудники не могли позорить вас из-за получения работы в качестве программиста в будущем? –
kfsone