Как мы знаем, параметр, который выглядит как void()
, будет переписан как void(*)()
. Это похоже на разложение матрицы на указатель, где int[]
становится int*
. Существует много случаев, когда использование массива будет разлагать его на указатель. Существуют ли случаи, отличные от параметров, где функции "распадаются"?
Стандарт С++ гласит:
§8.3.5/5
... После определения типа каждого параметра любой параметр тип "массив Т" или "возвращающая функцию Т" настраивается как "указатель to T" или "указатель на функцию возврата T", соответственно...
Поскольку комментатор ниже, похоже, мне не верит. Где мой компилятор показывает.
void handler(void func())
{
func(42);
}
main.cpp: In function 'void handler(void (*)())':
main.cpp:5:12: error: too many arguments to function
func(42);
^