首页
学习
活动
专区
工具
TVP
发布
社区首页 >问答首页 >Lambda-Over-Lambda in C ++ 14是怎么使用的?

Lambda-Over-Lambda in C ++ 14是怎么使用的?
EN

Stack Overflow用户
提问于 2018-04-18 23:55:15
回答 2查看 0关注 0票数 0

递归lambda函数如何结束呢?

代码语言:javascript
复制
#include <cstdio>

auto terminal = [](auto term)            // <---------+  
{                                        //           |
    return [=] (auto func)               //           |  ???
    {                                    //           |
        return terminal(func(term));     // >---------+
    };
};


auto main() -> int
{
    auto hello =[](auto s){ fprintf(s,"Hello\n"); return s; };
    auto world =[](auto s){ fprintf(s,"World\n"); return s; };


    terminal(stdout)
            (hello)
            (world) ;

    return 0;

}
EN

回答 2

Stack Overflow用户

发布于 2018-04-19 08:35:39

这不是递归函数调用,请逐步查看它:

  1. terminal(stdout) - 这只是返回已捕获的lambda stdout
  2. 使用lambda调用1的结果,该lambda hello执行lambda(func(term)),将结果传递给terminal()它,它只返回1中的lambda。
  3. 使用lambda调用2.的结果world,它与2相同,这次返回值被丢弃...
票数 0
EN

Stack Overflow用户

发布于 2018-04-19 09:03:14

该调用本身不是递归的。它返回一个函数对象,如果调用它,将terminal再次调用以生成另一个函数对象。

因此terminal(stdout)返回一个函子捕获stdout并可以被另一个函数对象调用。再次调用它,用捕获的术语(hello)调用hello函子stdout,输出"Hello"; 调用terminal并返回另一个函子,这次捕获返回值hello- 这仍然是stdout。调用该仿函数,(world)再次输出"World"

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/-100008180

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档