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