c++ std::thread run([&]())解析

这段代码创建了一个新的线程,并在该线程中执行一个匿名的Lambda函数。Lambda函数使用了引用捕获符号 & ,表示它会捕获当前作用域中的所有变量的引用。这样,Lambda函数就可以访问当前作用域中的所有变量,并在新线程中执行相应的操作。

一、多线程的返回值。

//简单的 c++11 线程,简单方便,成员函数随便调用,非成员函数也一样,如需要获取返回时,请自行使用条件变量std::thread run([&](){ //执行一些耗时的操作return0; }); run.detach();

//简单的 c++11 线程,简单方便,成员函数随便调用,非成员函数也一样,如需要获取返回时,请自行使用条件变量
    std::thread run([&](){
        //执行一些耗时的操作
        return 0;
    run.detach();

二、Lambda表达式

2.1 简介

Lambda表达式可以用来创建匿名函数,这些函数通常用于需要手动创建函数的地方,比如函数指针的回调函数。

Lambda表达式的基本语法如下:

[capture list] (parameters) -> return_type {
    // function body

其中,capture list是Lambda表达式的捕获列表,用于捕获当前作用域中的变量,parameters是Lambda表达式的参数列表,return_type是Lambda表达式的返回类型,而function body则是Lambda表达式的函数体。

2.2 使用Lambda函数创建线程

在C++11/14中,可以使用Lambda表达式创建线程,示例代码如下:

#include <iostream>
#include <thread>
int main() {
    std::thread t([]{
        std::cout << "Hello, world!\n";
    t.join();
    return 0;

在上面的代码中,我们使用了Lambda表达式创建了一个线程t,在Lambda表达式中,我们输出了一条Hello, world!的信息,并在主线程中调用了t.join()来等待线程t执行结束。

2.3 向Lambda函数传递参数

当我们需要给Lambda函数传递参数时,需要在捕获列表中捕获需要传递的参数,示例代码如下:

#include <iostream>
#include <thread>
int main() {
    int x = 42;
    std::thread t([x]{