我最近发现C ++中有一个引用功能概念:)。 因此,存在指向函数的指针和指向成员函数的不同类型。问题出现了。是否有“参考成员功能”的概念?
我尝试编译以下代码,但GCC 3.4.6给出了错误。
#include <iostream>
using namespace std;
class A {
public:
virtual void Af() const {
cout << "A::Af()" << endl;
}
};
int main() {
typedef void (A::& MemFnc)() const;
MemFnc mf = &A::Af;
A a;
(a.*mf)();
return 0;
}
答案 0 :(得分:21)
在C ++中没有名为的成员引用。
语言规范在说明(§8.3.3/ 3 - 2003)中明确指出,
指向成员的指针不得指向类(9.4)的静态成员,具有引用类型的成员或“cv void”。[注意:另请参阅5.3和5.5。 “指向成员的指针”类型与“指针”类型不同,也就是说,指向成员的指针仅由指向成员声明符语法的指针声明,而不是由指针声明符语法声明。 C ++中没有“引用成员”类型。
答案 1 :(得分:1)
没有成员函数的引用。
答案 2 :(得分:1)
不,不可能引用成员函数。
在某种意义上,取消引用指向成员函数的指针的结果可以作为一个结果,但是你可以对该结果执行唯一的事情就是调用一个函数调用操作符,per 5.5[expr.mptr.oper]/6
。不允许任何其他事情。