【问题标题】: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”,很难搜索到这个)。

标签: c++11 function-pointers


【解决方案1】:

create_evaluatorlambda expression(查看该页面底部的示例)。

如果是

auto create_evaluator = [funcParam] ()
{
    return anotherFunction(funcParam());
};
  • [funcParam] 是本地范围内的变量,由 lambda 函数捕获,因此可在 lambda 函数在其他地方调用时被引用。

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

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

随叫随到

create( [] () { return CONSTANT; } );

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

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

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2012-11-03
    • 2015-04-19
    • 1970-01-01
    • 1970-01-01
    • 2018-02-11
    • 2011-08-14
    • 2016-12-04
    相关资源
    最近更新 更多