CXX看多线程的时候遇到了一个重载的问题,不太明白,求解惑

下面是代码
#include <iostream>
#include <thread>
using namespace std;
struct func
{
    int& i;
    func(int& i_) : i(i_) {}
    void operator() ()
    {
        for (unsigned j = 0; j < 10; ++j)
        {
            cout << i << endl; // 1. 潜在访问隐患:悬空引用
        }
    }
};
int main ()
{
    int some_local_state = 0;
    func my_func(some_local_state);
    std::thread my_thread(my_func);//①
    my_thread.detach(); // 2. 不等待线程结束
    system("pause");
    return 0;
}
问题描述:
为什么①这个地方会去执行被重载的那个方法, 不应该是这样std::thread my_thread(my_func());才会去执行吗?有点迷糊,求解答,谢谢各位大佬。
#笔试题目#
全部评论
你传入的是一个函数对象,也是一个可执行对象,在线程里完成调用,看一下thread的源码的你应该就清楚了。
点赞 回复 分享
发布于 2019-07-28 11:24

相关推荐

不愿透露姓名的神秘牛友
07-18 12:01
点赞 评论 收藏
分享
07-02 22:46
门头沟学院 Java
码农索隆:hr:“管你投没投,先挂了再说”
点赞 评论 收藏
分享
评论
点赞
收藏
分享

创作者周榜

更多
牛客网
牛客网在线编程
牛客网题解
牛客企业服务