为了账号安全,请及时绑定邮箱和手机立即绑定

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

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

PHP
慕运维8079593 2023-03-02 21:17:31
auto fn = [](int *a) { for (int i = 0; i < 10; i++) cout << *a << endl; };
查看完整描述

2 回答

?
九州编程

TA贡献1785条经验 获得超4个赞

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

查看完整回答
反对 回复 2023-03-06
?
宝慕林4294392

TA贡献2021条经验 获得超8个赞

就是创建临时函数以方便重复调用,这个一般在局部函数中使用,不暴露在外部的。
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;


查看完整回答
反对 回复 2023-03-06
  • 2 回答
  • 0 关注
  • 63 浏览

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信