Я не могу быть уверен, что прав, но вот возможное объяснение: каждая функция в c, а также в c ++ является потенциальной переменной.Возможное объявление функции:
int (*MyFunction)(int, double);
В этом случае - имя переменной: MyFunction
|Тип: функция, которая возвращает int
с int, double
параметрами.
Таким образом, даже когда вы объявляете функцию, вы фактически объявляете переменную с типом "функция".В этом случае имеет смысл, почему вы можете использовать, в вашем случае, (*add)(3, 2)
для вызова функции (или с помощью переменной).
Возможно, вам будет более ясно взглянуть на лямбда-выражения,который может сделать реализацию функции, а затем позволить вам использовать ее как локальную переменную функции:
int(*MyFunction)(int, double) = [](int a, double b) -> int {
return (int)((a + b) * 10);
};
Здесь мы объявляем переменную типа функции и реализуем для нее функцию с помощью лямбда-выражения.Теперь мы можем использовать его в двух формах:
MyFunction(1, 2.5); // Like a regular function
(*MyFunction)(1, 2.5); // As a function type variable
Опять же, это самое разумное объяснение, которое я мог придумать.Я не уверен, что это правильное / лучшее / полное объяснение, но я надеюсь, что оно дало вам новый взгляд на функции.