13

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

函数指针需要和号吗

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

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

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

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

4

1 回答 1

22

函数指针不需要它,成员函数指针需要它。

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

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

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

于 2013-08-19T11:02:28.107 回答