在C++中返回lambda函数

una*_*der 1 c++ lambda

typedef int (*identity_t)(int); 
identity_t retFun() { 
  return [](int x) { return x; };
}
Run Code Online (Sandbox Code Playgroud)

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

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

int (*)(int) retFun() { 
  return [](int x) { return x; };
}
Run Code Online (Sandbox Code Playgroud)

Bri*_*ian 7

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

int (*retFun())(int) {
    return [](int x) { return x; };
}
Run Code Online (Sandbox Code Playgroud)

正如您所看到的,typedef不仅使写入更容易; 它也使阅读更容易.

  • 使用`auto`也可以让它更容易阅读,同时仍然避免使用typedef:`auto retFun() - > int(*)(int){...}` (2认同)