猿问

第一次见这个函数名的写法auto fn = [],知道函数干什么的吗?

auto fn = [](int *a) { for (int i = 0; i < 10; i++) cout << *a << endl; };

慕运维8079593
浏览 64回答 2
2回答

九州编程

public class Day1{ public static void main(String[] args){ int a = 1; a++;&nbsp;System.out.println(a);} }方法要放在类里面,方法的实现要放在方法里面

宝慕林4294392

就是创建临时函数以方便重复调用,这个一般在局部函数中使用,不暴露在外部的。auto是C/C++的东西,在C++11标准的语法中,auto被定义为自动推断变量的类型。[](){}; 是在定义一个函数,记得怎么定义函数指针的么 typedef void (*FUNP)(int a); 类似的吧。[]中括号里可以用&修饰,具体什么作用可以查查资料,我也不太清楚,在大部分情况下&符号不加也没关系,但有时编译器无法隐式捕获;()小括号中是形参列表;{}括号中是函数体,因为是定义函数,大括号后面记得加 ; 分号。例子:void test(){auto fn = [&](int i){printf("%d\n",i);i++;return i;};int var = 0;while(var < 10000){var = fn(var);}}还有,利用此方法可以很方便的开辟线程例子:之前用Qt写的测试代码,就没重新写例子#include "thread"#include <qmutex.h>#include <QDebug>#include <QTime>long long tt = 0;QMutex mtx;int main(int argc, char *argv[]){std::thread *thd_test = new std::thread([&](){bool quit = false;while(!quit){mtx.lock();tt++;if(tt== LLONG_MAX)quit = true;if(tt == 5000)thd_test->detach();mtx.unlock();std::this_thread::sleep_for(std::chrono::milliseconds(2));}});std::thread *thd_run = new std::thread([&](){bool exit = false;while(!exit){mtx.lock();qDebug() << "thd_run" << tt;if(tt == 10000)exit = true;mtx.unlock();std::this_thread::sleep_for(std::chrono::milliseconds(1));}});thd_run->join();qDebug() << "***********************************************";std::this_thread::sleep_for(std::chrono::seconds(5));qDebug() << "***********************************************";std::thread *thd_after = new std::thread([&](){bool exit = false;while(!exit){mtx.lock();qDebug() << "thd_after" <<tt;if(tt == 20000)exit = true;mtx.unlock();std::this_thread::sleep_for(std::chrono::milliseconds(1));}});thd_after->join();return 0;}&nbsp;
随时随地看视频慕课网APP
我要回答