2

Why is there an ampersand when taking the address of a member function as opposed to a global function? I.e., why something like

std::bind(&MyClass::MemberFunction, ...);

when global functions would require

std::bind(GlobalFunction, ...);

?

Kristian D'Amato
  • 3,996
  • 9
  • 45
  • 69

1 Answers1

10

C allowed implicit conversions from global function names to pointers to those functions. C++ kept these implicit conversions for backwards compatibility reasons. C does not have member functions, and so there was no need to provide the implicit conversion in the case of member functions.

C++ does not allow the implicit conversion in the cases where it was not forced to for compatibility with C, because it was felt that such conversions were confusing and possibly ambiguous, while providing few benefits.

Mankarse
  • 39,818
  • 11
  • 97
  • 141