繁体   English   中英

为什么成员函数需要'&'(例如在std :: bind中)?

[英]Why does a member function needs '&' (e.g. in std::bind)?

当我从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;
}

但是如果我在bind消除了Foo::G前面的'&',我会得到一些编译器错误(使用MinGW 4.7)。

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

LG ntor

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

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

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

MyClassOrOneOfItsBases::memberFunction();

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

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM