对成员函数的引用? 我最近发现C++中有一个函数概念的引用。 因此,函数指针和成员函数指针有不同的类型。问题出现了。是否有“成员职能参考”的概念

对成员函数的引用? 我最近发现C++中有一个函数概念的引用。 因此,函数指针和成员函数指针有不同的类型。问题出现了。是否有“成员职能参考”的概念,c++,function-pointers,C++,Function Pointers,我试图编译以下代码,但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:

我试图编译以下代码,但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;
}
#包括
使用名称空间std;
甲级{
公众:
虚空Af()常量{

CUT< P>没有成员函数的引用。

< P> C++中没有这样的成员称为成员。

语言规范在注释(§8.3.3/3-2003)中明确指出

指向构件的指针不得指向类别(9.4)的静态构件、引用类型的构件或“cv void”。[注:另见5.3和5.5。“指向构件的指针”类型与“指针”类型不同也就是说,指向成员的指针只能由指向成员声明符语法的指针声明,而不是由指针声明语法来声明。<强> C++中没有“引用成员”类型。>/P>
否,无法引用成员函数


从某种意义上讲,对成员函数的指针进行解引用的结果可以作为一个结果,但您可以对该结果执行的唯一操作是根据
5.5[expr.mptr.oper]调用函数调用运算符/< 6 / <代码>。没有其他允许。

GCC 3.4.6。您应该考虑更新编译器。此外,当询问触发编译器错误的代码时,通常提供一个好主意,即提供实际错误消息(从输出中的第一个错误开始)并识别编译器抱怨的行。我没有权限更新GCC:(.我没有提供错误代码,因为我认为在这种情况下,不管错误类型是什么,关键是它不理解这种语法。如果要引用成员,应该使用哪种语法?指向成员的指针与
*
一起使用,因此常用用法建议引用成员我只是把星星掉了,原来是普通的
?!这和使用普通成员完全一样。从技术上讲,你用粗体突出显示的内容是不规范的,因为它只是一个注释。@Charles:是的。我知道。但这很容易阅读和理解。这就是我引用它的原因。我的观点是当你说“语言规范明确地说”,这有点不真实,因为规范没有明确地说“没有”对成员“类型”的引用,它只是省略了提供一个。@Charles:但是注释被描述为“信息性的”。因此它们必须是真的,否则它们就不会是信息性的,它们将是错误的;-)只有在存在细微分歧或语言使用不一致的情况下,你才需要使用这样一个事实,即注释是标准主要段落的附属部分。它们仍然是标准的一部分,因此他们所说的标准是这样说的。它只是非正式地说,而不是规范地说。标准明确地说了这一点,但我支持ose它没有显式地定义它,只是隐式地定义它。@SteveJessop:我并不反对引用有用的(如果不是确定的),只是“语言规范”的前缀显式地说“没有任何我觉得有误导性的限制。信息性注释不是语言规范本身的一部分,只是帮助解释。