Отличия передачи указателя на функцию в функцию

171
07 марта 2019, 23:20

В чем разница двух этих конструкций.

void Function(int operation(int) ) {}
void Function(int (*operation)(int) ) {}
Answer 1

В первом случае параметр имеет тип функции, во втором случае - указатель на функцию. Согласно пункту 11.3.5/5 стандарта C++, если параметр имеет тип функции T, то он преобразуется в тип указатель на функцию T.

(N4659)
11.3.5 Functions

  1. ...
    After determining the type of each parameter, any parameter of type “array of T” or of function type T is adjusted to be “pointer to T”
    ...

Согласно этому пункту в функции

void Function(int operation(int)) {} 

параметр operation будет иметь тип int (*)(int), т.е. такое объявление будет эквивалентно

void Function(int (*operation)(int) ) {}

Тоже самое происходит и с массивами.

Answer 2

Абсолютно никакой разницы. Оба варианта означают передачу int (*operation)(int).

READ ALSO
ИЗ Little endian в big-endian

ИЗ Little endian в big-endian

Нужно перевести число из Little endian в big-endianДано изначально 32 битное число представленное в десятичном виде

184
Доступ к внутреннем данным элемента TreeView

Доступ к внутреннем данным элемента TreeView

Подскажите чайнику,пожалуйста, как обойти ситуациюВ своем приложении решил создать иерархическую структуру данных

205
Перегрузка оператора присваивания в C++

Перегрузка оператора присваивания в C++

Нужна помощь умных людейНужно: Создать класс СТРОКА, реализующий текстовую строку

162