Оператор
A switch
с соседними числами часто оптимизируется внутри таблицы поиска указателя функции.
Исторически сложилось так, что компиляторы были плохими, и таблицы указателей на функции всегда были быстрее в те времена. В настоящее время производительность не должна быть аргументом ни для одной из версий. Фактически, один недостаток таблицы указателей функций в том, что компилятор не сможет встроить функции, что он может иначе сделать при оптимизации switch
.
, поэтому вам не следует использоватьверсия указателя на функцию, потому что она быстрее / медленнее, а скорее потому, что она может улучшить читаемость и поддержку кода.
Например, обычная практика - использовать такие таблицы указателей функций при реализации конечных автоматов. С другой стороны, сложные switch
операторы трудны для чтения, и существуют различные причуды с синтаксисом, такие как отсутствующая ошибка break
и т. Д.
Наконец, вы можете улучшить читабельность своего кода, если выНапишите так:
typedef void operation_t (int op1, int op2); // function type
operation_t* const op_array[] = {add, subtract, multiply}; // read-only function pointer table
op_array[i](a, b); // call specific function