在C++中返回lambda函数

在C++中返回lambda函数,c++,lambda,C++,Lambda,这段代码可以工作,但是为什么我需要第一行呢 为什么下面的代码不起作用 typedef int (*identity_t)(int); identity_t retFun() { return [](int x) { return x; }; } typedef使编写函数声明更容易,但如果您知道正确的语法,则不需要typedef: int (*)(int) retFun() { return [](int x) { return x; }; } 正如您所看到的,typedef不仅

这段代码可以工作,但是为什么我需要第一行呢

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

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

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

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

正如您所看到的,typedef不仅使书写更容易;它也使其更易于阅读。

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

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

正如您所看到的,typedef不仅使书写更容易;从C继承下来的C++语法很奇怪,违反直觉,而且过时。你需要用typefef来处理这个事实

int (*retFun())(int) {
    return [](int x) { return x; };
}
坦率地说,这是一个无法理解的混乱局面

< > C++语法的新成果有助于减轻这个问题。

int (*retFun())(int) { ... } 
新语法大部分是从左到右编写的,就像人们读到的那样

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

  auto retFun
。。。一个不带参数并返回

  () ->
  (int) -> 
。。。指向

  auto (*)
。。。接受整型参数并返回

  () ->
  (int) -> 
。。。整数


C++继承自C的语法是怪异的、违反直觉的和过时的。你需要用typefef来处理这个事实

int (*retFun())(int) {
    return [](int x) { return x; };
}
坦率地说,这是一个无法理解的混乱局面

< > C++语法的新成果有助于减轻这个问题。

int (*retFun())(int) { ... } 
新语法大部分是从左到右编写的,就像人们读到的那样

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

  auto retFun
。。。一个不带参数并返回

  () ->
  (int) -> 
。。。指向

  auto (*)
。。。接受整型参数并返回

  () ->
  (int) -> 
。。。整数