当我在 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
答案 0 :(得分:4)
&安培;需要使用成员函数的地址,有些编译器会允许你省略它,但它是非标准的并且有时令人困惑。
你可以在这里阅读有关成员函数指针的内容: http://www.codeproject.com/Articles/7150/Member-Function-Pointers-and-the-Fastest-Possible
答案 1 :(得分:2)
我认为其中一个原因可能是一致性。回想一下,在课堂上,你可以说
MyClassOrOneOfItsBases::memberFunction();
编译很好,因为限定名称命名成员函数,而不是形成指向成员的指针。