传递静态方法作为参数,不需要地址运算符?

问题描述 投票:3回答:1
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,我注意到在将静态成员函数作为参数传递时是否使用运算符(&)的地址似乎并不重要。没关系吗?如果没有,为什么?一种方式比另一种更正确吗?

c++ function-pointers static-methods member-functions address-operator
1个回答
7
投票

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

C ++ 11标准,4.3 / 1:

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

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

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

© www.soinside.com 2019 - 2024. All rights reserved.