У указателей функций нужен амперсанд
В C/С++, если у меня есть следующие функции:
void foo();
void bar(void (*funcPtr)());
Есть ли разница между этими двумя вызовами:
bar(foo);
bar(&foo);
?
Ответы
Ответ 1
Нет, нет никакой разницы, поскольку функция может быть неявно преобразована в указатель на функцию.
Соответствующая цитата из стандарта (N3376 4.3/1).
Значение l типа функции T может быть преобразовано в prvalue типа "указатель на T". Результатом является указатель на
функция.
Ответ 2
Есть ли разница между этими двумя вызовами:
Нет, нет разницы.
Ответ 3
bar(foo);
называется "короткой" версией
bar(&foo);
заключается в том, как это официально делается
Функционально, нет никакой разницы, однако большинство других вариантов считают "хорошей практикой" большинством, так как это более очевидно, что foo фактически является указателем на функцию, а не фактической функцией.
Это похоже на массивы. Если у вас есть:
int foobar[10];
то foobar - это int *, но вы также можете сделать foobar для того же результата.