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

发布于 2024-12-09 18:33:57 字数 440 浏览 0 评论 0原文

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

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);
}

I'm playing around with Boost.Thread and I notice it doesn't seem to matter whether I use the address of operator (&) or not when passing a static member function as an argument. Does it not matter? And if not, why? Is one way more correct than the other?

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(1

白色秋天 2024-12-16 18:33:57

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

C++11 标准,4.3/1:

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

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

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

It effectively does not matter. Functions (free functions and static member functions, not non-static member functions) decay to function pointers. No way is more correct than the other, I happen to prefer the explicit one though.

C++11 Standard, 4.3/1:

An lvalue of function type T can be converted to a prvalue of type “pointer to T.” The result is a pointer to the function.

C++11 Standard, 5.2.2/1 - Function call:

There are two kinds of function call: ordinary function call and member function call. A static member function is an ordinary function.

~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文