语法帮助:方括号括起来的函数指针[重复]

Posted

技术标签:

【中文标题】语法帮助:方括号括起来的函数指针[重复]【英文标题】:Syntax help: Function pointer surrounded by square brackets [duplicate] 【发布时间】:2018-03-05 21:47:46 【问题描述】:

我对在下面的 C++11 代码段中 [funcParam] 周围使用方括号感到困惑:

typedef std::function<std::vector<OtherType> ()> FuncPtr;

inline void create(FuncPtr funcParam)

    auto create_evaluator = [funcParam] ()
    
        return anotherFunction(funcParam());
    ;
    // ...

这一行调用的上面的代码(为了保持可读性做了一些简化):

create( [] ()  return CONSTANT;  );

有人可以解释在这两种情况下括号的使用吗?在调用代码中,它看起来被用来创建一个没有名称的函数。它在第一部分做什么?谢谢!

【问题讨论】:

这称为 lambda 表达式。谷歌“C++ 11 lambda”,你会发现很多信息。 正是我需要的,谢谢! (如果没有“lambda”,很难搜索到这个)。 【参考方案1】:

create_evaluator 是 lambda expression(查看该页面底部的示例)。

如果是

auto create_evaluator = [funcParam] ()

    return anotherFunction(funcParam());
;

[funcParam] 是本地范围内的变量,由 lambda 函数捕获,因此可在 lambda 函数在其他地方调用时被引用。

() 表示 lambda 函数的参数(本例中没有)

return anotherFunction(funcParam()); 是 lambda 函数的主体。

随叫随到

create( [] ()  return CONSTANT;  );

create 以另一个 lambda 表达式作为参数调用。那个 lambda 参数

没有捕获任何内容:[] 没有参数:() 有正文: return CONSTANT;

【讨论】:

以上是关于语法帮助:方括号括起来的函数指针[重复]的主要内容,如果未能解决你的问题,请参考以下文章

C语言-指针

函数指针

函数指针数组的长度[重复]

C ++类成员函数别名模板,防止大括号括起来的初始化程序列表被识别为对/元组

指针理解——复杂指针解析

c++ 函数指针实例详解