3
class ThreadWorker
{
public:
    ThreadWorker(void);
    virtual ~ThreadWorker(void);

    static void DoSomething();
};


int main()
{
    boost::thread thread1(ThreadWorker::DoSomething);
    boost::thread thread2(ThreadWorker::DoSomething);
    boost::thread thread3(&ThreadWorker::DoSomething);
}

我正在玩 Boost.Thread 并且我注意到在传递静态成员函数作为参数时是否使用运算符 (&) 的地址似乎并不重要。没关系吗?如果不是,为什么?一种方法比另一种更正确吗?

4

1 回答 1

7

它实际上并不重要。函数(自由函数和静态成员函数,不是非静态成员函数)衰减为函数指针。没有比另一种更正确的方法了,不过我碰巧更喜欢明确的方法。

C++11 标准,4.3/1:

函数类型 T 的左值可以转换为“指向 T 的指针”类型的纯右值。结果是指向函数的指针。

C++11 标准,5.2.2/1 - 函数调用:

函数调用有两种:普通函数调用和成员函数调用。静态成员函数是一个普通函数。

于 2011-10-13T23:20:25.103 回答