搜索
bottom↓
回复: 9

auto state_is_target = [&](const string &s) {return s == end;};如何理解?

[复制链接]

出0入4汤圆

发表于 2020-10-9 12:24:02 | 显示全部楼层 |阅读模式
auto state_is_target = [&](const string &s) {return s == end;};语言功底太差 这行代码应该怎么理解

阿莫论坛20周年了!感谢大家的支持与爱护!!

月入3000的是反美的。收入3万是亲美的。收入30万是移民美国的。收入300万是取得绿卡后回国,教唆那些3000来反美的!

出280入168汤圆

发表于 2020-10-9 12:32:03 | 显示全部楼层
把字符串的首地址作为函数组中的某个函数进行调用,并返回一个预定义为 ‘end’ 的常数给自动变量 state_is_target 。

我猜测是有一组状态查询的函数表,借用字符串的形式储存在某处,然后靠指定字符串地址的方式来分别调用。

出0入93汤圆

发表于 2020-10-9 12:41:45 | 显示全部楼层
C++11的lambda表达式,我给您改成您能识别的方式:
  1. bool __fn_state_is_target (const string &s) {
  2.     return s == end;
  3. }

  4. bool (*state_is_target) (const string &s) = __fn_state_is_target ;
复制代码
大概就这个模样,引用捕获我不知道该怎么写,因为lambda表达式实际上是个闭包,它本身具有状态。

出280入168汤圆

发表于 2020-10-9 12:46:23 | 显示全部楼层
takashiki 发表于 2020-10-9 12:41
C++11的lambda表达式,我给您改成您能识别的方式:大概就这个模样,引用捕获我不知道该怎么写,因为lambda ...

已经好久没玩 C++ 了,改进了这么多?

孤陋寡闻了,落后了两个时代 ...

有时间的话要重新进修了。

出0入442汤圆

发表于 2020-10-9 12:52:04 来自手机 | 显示全部楼层
takashiki 发表于 2020-10-9 12:41
C++11的lambda表达式,我给您改成您能识别的方式:大概就这个模样,引用捕获我不知道该怎么写,因为lambda ...

事实上,这些功能99.999%的人一辈子都不会用到一次。所谓的 为了语法而语法 的就是这类。我记得c++之父把委员会狠批了一顿,说他们搞的c++20就是为了搞c++20而搞c++20,添了一堆没任何实际意义的东西。

出0入93汤圆

发表于 2020-10-9 12:56:10 | 显示全部楼层
chunjiu 发表于 2020-10-9 12:46
已经好久没玩 C++ 了,改进了这么多?

孤陋寡闻了,落后了两个时代 ...

C++的改进实在是太辣眼睛,从C++11开始每3年一个更新,很多特性都是为了完成任务,千呼万唤的又实现不了使劲跳票,现在N项特性已经推到C++23去了。已经实现的好用的少,垃圾无限堆,简直无法吐槽 ... 相对而言,C的改进虽然不多而且谨慎,但是好用啊。GCC激进的奇葩语法也有不少,也好用。

出0入93汤圆

发表于 2020-10-9 12:57:00 | 显示全部楼层
wye11083 发表于 2020-10-9 12:52
事实上,这些功能99.999%的人一辈子都不会用到一次。所谓的 为了语法而语法 的就是这类。我记得c++之 ...

没错。记得有哪个专家说C++就是一坨屎,C++的升级就是屎上倒屎。

出280入168汤圆

发表于 2020-10-9 13:05:13 | 显示全部楼层
takashiki 发表于 2020-10-9 12:57
没错。记得有哪个专家说C++就是一坨屎,C++的升级就是屎上倒屎。

哦,兄弟这盆冷水浇得 ... 我又失去动力了

对我来说,以前的知识还是够用的,

我以为新加的特性让 C++ 变得更清晰了呢!

出0入8汤圆

发表于 2020-10-9 13:31:35 | 显示全部楼层
takashiki 发表于 2020-10-9 12:41
C++11的lambda表达式,我给您改成您能识别的方式:大概就这个模样,引用捕获我不知道该怎么写,因为lambda ...

不能用函数指针来代替lambda,没有捕捉任何变量的lambda可以退化成函数指针
楼主这里用引用方式捕捉了end,必须要用仿函数的形式来实现。

  1. void lambda_test()
  2. {
  3.   string end = "end";
  4.   class functor {
  5.   public:
  6.     functor(string& cap_end):end(cap_end){}
  7.     bool operator()(const string& s) {
  8.       return s == end;
  9.     }
  10.     string& end;
  11.   };
  12.   functor state_is_target1 = functor(end);

  13.   auto state_is_target2 = [&](const string& s) {return s == end; };

  14.   cout << state_is_target1("end") << state_is_target2("end");
  15. }
复制代码

出0入0汤圆

发表于 2020-10-9 14:18:08 | 显示全部楼层
takashiki 发表于 2020-10-9 12:57
没错。记得有哪个专家说C++就是一坨屎,C++的升级就是屎上倒屎。

linux 的爸爸说的。  看这语法,越发觉得C#的语法糖舒服多了。
回帖提示: 反政府言论将被立即封锁ID 在按“提交”前,请自问一下:我这样表达会给举报吗,会给自己惹麻烦吗? 另外:尽量不要使用Mark、顶等没有意义的回复。不得大量使用大字体和彩色字。【本论坛不允许直接上传手机拍摄图片,浪费大家下载带宽和论坛服务器空间,请压缩后(图片小于1兆)才上传。压缩方法可以在微信里面发给自己(不要勾选“原图),然后下载,就能得到压缩后的图片】。另外,手机版只能上传图片,要上传附件需要切换到电脑版(不需要使用电脑,手机上切换到电脑版就行,页面底部)。
您需要登录后才可以回帖 登录 | 注册

本版积分规则

手机版|Archiver|amobbs.com 阿莫电子技术论坛 ( 粤ICP备2022115958号, 版权所有:东莞阿莫电子贸易商行 创办于2004年 (公安交互式论坛备案:44190002001997 ) )

GMT+8, 2024-4-26 13:56

© Since 2004 www.amobbs.com, 原www.ourdev.cn, 原www.ouravr.com

快速回复 返回顶部 返回列表