如果函数指针不需要&符号,为什么boost :: bind需要一个?

Rod*_*ddy 11 c++ function-pointers boost-bind

我一直认为函数指针不需要&符号:

函数指针需要一个&符号

然而,我所看到的每个使用的例子都boost::bind显示了一个,而我的编译器 - 在大多数情况下 - 如果省略则会给出一个通常难以理解的错误信息.

synchronize(boost::bind(&Device::asyncUpdate , this, "ErrorMessage"));  // Works

synchronize(boost::bind(Device::asyncUpdate , this, "ErrorMessage"));   // Fails
Run Code Online (Sandbox Code Playgroud)

假设boost::bind第一个参数基本上是函数指针,我错了吗?

jro*_*rok 21

函数指针不需要它,成员函数指针就可以了.

Device::asyncUpdate是成员函数,因为你可以猜测,因为它被绑定this.

这是n3337,5.3.1/4的规范性引用

仅当使用显式&时,才会形成指向成员的指针,并且其操作数是未括在括号中的限定符.