我理解我的第二个声明“为什么& amp不需要正常的函数指针”因为函数名本身就是函数的地址。
我不明白为什么'&'成员函数指针是否严格需要?
实施例: 正常函数指针:
int add(int a, int b) {
return (a + b);
}
int (*fp)(int, int);
fp = add;
(*fp)(2, 3) // This would give me addition of a and b, i.e. 5
成员函数指针:
class ABC {
public:
int i;
ABC() { i = 0; }
int addOne(int j) {
return j + 1;
}
};
// Member function pointer
int (ABC::*mfp)(int);
// This is what I am talking about. '&' in below line.
mfp = &ABC::addOne;
ABC abc;
std::cout << (abc.*mfp)(2) << std::endl;
答案 0 :(得分:-1)
在我看来,成员函数指针必须使用address-of运算符,因为声明的右侧(rhs)是常量而不是变量。
我们不会说
int (ABC::*mfp)(int);
mfp = ABC::addOne();
因为这将调用一个函数。
此外,作用域解析运算符::在C ++运算符优先级表中具有最高优先级:
::运算符的运算要早于其他运算符的运算。我想编译器会怀疑“嗯...那是什么?那应该是一个函数,但是...”,然后看到操作符的地址并知道开发人员需要什么。