3

当我使用std::bindC ++11标准时,我认识到编译器允许以下内容:

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;
}

但是如果我消除了 - 行前面的“&” Foo::Gbind我会得到一些编译器错误(使用 MinGW 4.7)。

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

LG ntor

4

2 回答 2

4

& 需要获取成员函数的地址,一些编译器将允许您省略相同的地址,但它是非标准的,有时会令人困惑。

您可以在此处阅读有关成员函数指针的信息:http: //www.codeproject.com/Articles/7150/Member-Function-Pointers-and-the-Fastest-Possible

于 2012-11-06T22:28:13.497 回答
2

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

MyClassOrOneOfItsBases::memberFunction();

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

于 2012-11-07T10:01:14.623 回答