为什么会员功能需要'&' (例如在std :: bind中)?

时间:2012-11-06 22:18:54

标签: c++ c++11

当我在 C ++ 11 -standard中使用std::bind时,我发现编译器允许以下内容:

class Foo
{
public:
  void F();
  int G(int, int);
};

void Foo::F()
{
  auto f = bind(&Foo::G, this, _1, _2);
  cout << f(1,2) << endl;
}

int Foo::G(int a, int b)
{
  cout << a << ',' << b << endl;
  return 666;
}

但如果我取消'&amp;'在Foo::G行的bind前面,我会遇到一些编译器错误(使用MinGW 4.7)。

为什么Foo::G无法作为指向成员函数的指针,尽管H&H都适用于“常规”函数?

LG ntor

2 个答案:

答案 0 :(得分:4)

&安培;需要使用成员函数的地址,有些编译器会允许你省略它,但它是非标准的并且有时令人困惑。

你可以在这里阅读有关成员函数指针的内容: http://www.codeproject.com/Articles/7150/Member-Function-Pointers-and-the-Fastest-Possible

答案 1 :(得分:2)

我认为其中一个原因可能是一致性。回想一下,在课堂上,你可以说

MyClassOrOneOfItsBases::memberFunction();

编译很好,因为限定名称命名成员函数,而不是形成指向成员的指针。