В моем коде я использую, чтобы писать случайные случаи по умолчанию, содержащие утверждения вроде следующего, чтобы защитить меня от забывания обновить переключатель в случае изменения семантики
switch(mode) {
case ModeA: ... ;
case ModeB: ... ;
case .. /* many of them ... */
default: {
assert(0 && "Unknown mode!");
return ADummyValue();
}
};
Теперь я задаюсь вопросом, повлияет ли случай стандартного исправления по умолчанию на скачкообразное преобразование? Представьте, что "ModeA" "ModeB" и т.д. Являются последовательными, поэтому компилятор может оптимизировать таблицу. Поскольку "случай по умолчанию" содержит фактический оператор "return" (поскольку assert исчезнет в режиме деблокирования, и компилятор будет стонать о отсутствующем операторе return), кажется маловероятным, что компилятор оптимизирует ветку по умолчанию.
Какой лучший способ справиться с этим? Некоторый друг рекомендовал мне заменить "ADummyValue" на разыменование нулевого указателя, чтобы компилятор, в присутствии поведения undefined, мог опустить, чтобы предупредить о отсутствующем операторе return. Есть ли лучшие способы решить эту проблему?