在C ++中返回lambda函数

时间:2018-11-07 05:07:23

标签: c++ lambda

typedef int (*identity_t)(int); 
identity_t retFun() { 
  return [](int x) { return x; };
}

这段代码有效,但是为什么我需要第一行?

为什么下面的代码不起作用?

int (*)(int) retFun() { 
  return [](int x) { return x; };
}

2 个答案:

答案 0 :(得分:7)

typedef使编写函数声明更加容易,但是如果您知道正确的语法,则不需要typedef:

int (*retFun())(int) {
    return [](int x) { return x; };
}

如您所见,typedef不仅使编写更容易;它也使阅读更容易。

答案 1 :(得分:3)

从C继承的

C ++语法很古怪,违反直觉且过时。您需要使用typefef来应对这一事实。

int (*retFun())(int) { ... } 

坦白地说,这是一个难以理解的混乱。

使用C ++语法的新方法在某种程度上缓解了该问题。

auto retFun () -> auto (*)(int) -> int { 
   return [](int x) { return x; };
}

新语法几乎是从左到右编写的,就像人们会读到的一样。

  auto retFun

“ retFun是...”

  () ->

“ ...一个不带参数并返回...的函数”

  auto (*)

“ ...指向...的指针”

  (int) -> 

“ ...具有int参数并返回...的函数”

  int

“ ...一个整数”。

More about function declarations