Включает ли регистр «по умолчанию» нарушать оптимизацию таблицы переходов?

В моем коде я использую для написания случаев отката по умолчанию, содержащих утверждения, подобные приведенным ниже, чтобы я не забыл обновить переключатель в случае изменения семантики

switch(mode) {
case ModeA: ... ;
case ModeB: ... ;
case .. /* many of them ... */
default: {
  assert(0 && "Unknown mode!");
  return ADummyValue();
}
};

Теперь я интересно, будет ли случай по умолчанию искусственной проверки отката мешать генерации таблицы переходов? Представьте, что «ModeA», «ModeB» и т. Д. Являются последовательными, чтобы компилятор мог оптимизировать в таблицу. Поскольку вариант «по умолчанию» содержит фактический оператор «возврата» (поскольку утверждение исчезнет в режиме выпуска, а компилятор будет стонать по поводу отсутствующего оператора возврата), маловероятно, что компилятор оптимизирует ветвь по умолчанию.

Как лучше всего с этим справиться? Один друг порекомендовал мне заменить "ADummyValue" разыменованием нулевого указателя, чтобы компилятор при наличии неопределенного поведения может не предупреждать об отсутствующем операторе возврата. Есть ли лучшие способы решить эту проблему?

11
задан Johannes Schaub - litb 25 November 2010 в 15:54
поделиться