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