通过lambda中的引用捕获变量,然后按值捕获lambda

时间:2014-10-31 00:23:24

标签: c++ visual-studio-2013 lambda

如果我通过lambda中的引用捕获一个变量,然后将该lambda按值传递给一个新线程,我希望该变量被复制(作为lambda的一部分),但这似乎并不是是这样的。

我希望以下代码能够打印hello,但它没有。你能解释一下原因吗?

void foo(std::function<void()>& func)
{    
    std::thread t([func]() // capture func by value
    {
        Sleep(1000);
        func();
    });

    t.detach();
}

int main() 
{    
    {
        std::string str("hello");
        std::cout << "Main: Address of str is " << &str << std::endl;

        std::function<void()> func = [&str]()  // capture str by reference
        {
            std::cout << "Func: Address of str is " << &str << std::endl;
            std::cout << str << std::endl;
        };

        foo(func);
    }

    std::cin.get();
}

0 个答案:

没有答案