Указатели могут быть объявлены как указывающие на изменяемые (неконстантные) данные или как указатели на постоянные данные.
Указатели можно определить так, чтобы они указывали на функцию.
Мои коллеги и я обсуждали использование «const» с указателями, и возник вопрос об использовании const
с указателями на функции.
Вот несколько вопросов:
- В чем смысл указателя на константную функцию по сравнению с указателем на непостоянную функцию?
- Может ли функция быть константой?
- Может ли функция быть неконстантной (мутабельной)?
- Каков правильный (безопасный) синтаксис для передачи указателя на функцию?
Редактировать 1: синтаксис указателя функции
typedef void (*Function_Pointer)(void); // Pointer to void function returning void.
void function_a(Function_Pointer p_func); // Example 1.
void function_b(const Function_Pointer p_func); // Example 2.
void function_c(Function_Pointer const p_func); // Example 3.
void function_d(const Function_Pointer const p_func); // Example 4.
Приведенные выше объявления являются примерами обращения с указателем на функцию как с указателем на встроенный тип.
Данные, переменная или указатель памяти допускают указанные выше комбинации.
Итак, вопросы таковы: могут ли указатели на функции иметь такие же комбинации и что подразумевается под указателем на константную функцию (например, в примере 2)?