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

If ampersands aren't needed for function pointers, why does boost::bind require one?

本文关键字:bind 一个 boost 不需要 指针 函数 amp 为什么 符号 如果      更新时间:2023-10-16

我一直相信函数指针不需要符号:

函数指针需要一个安培数和吗

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

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

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

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

Device::asyncUpdate是成员函数,正如您所猜测的,因为它被绑定到this

这是n3337,5.3.1.4 的规范性引用

只有当显式&使用,并且其操作数是一个不包含在括号中的限定id。