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]{