Подтвердить что ты не робот

У указателей функций нужен амперсанд

В C/С++, если у меня есть следующие функции:

void foo();
void bar(void (*funcPtr)());

Есть ли разница между этими двумя вызовами:

bar(foo);
bar(&foo);

?

4b9b3361

Ответ 1

Нет, нет никакой разницы, поскольку функция может быть неявно преобразована в указатель на функцию. Соответствующая цитата из стандарта (N3376 4.3/1).

Значение l типа функции T может быть преобразовано в prvalue типа "указатель на T". Результатом является указатель на функция.

Ответ 2

Есть ли разница между этими двумя вызовами:

Нет, нет разницы.

Ответ 3

bar(foo); называется "короткой" версией

bar(&foo); заключается в том, как это официально делается

Функционально, нет никакой разницы, однако большинство других вариантов считают "хорошей практикой" большинством, так как это более очевидно, что foo фактически является указателем на функцию, а не фактической функцией.

Это похоже на массивы. Если у вас есть:

int foobar[10]; 

то foobar - это int *, но вы также можете сделать foobar для того же результата.