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, ...);
?
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.
If you love us? You can donate to us via Paypal or buy me a coffee so we can maintain and grow! Thank you!
Donate Us With