typedef int (*identity_t)(int);
identity_t retFun() {
return [](int x) { return x; };
}
这段代码有效,但是为什么我需要第一行?
为什么下面的代码不起作用?
int (*)(int) retFun() {
return [](int x) { return x; };
}
答案 0 :(得分:7)
typedef使编写函数声明更加容易,但是如果您知道正确的语法,则不需要typedef:
int (*retFun())(int) {
return [](int x) { return x; };
}
如您所见,typedef不仅使编写更容易;它也使阅读更容易。
答案 1 :(得分:3)
C ++语法很古怪,违反直觉且过时。您需要使用typefef来应对这一事实。
int (*retFun())(int) { ... }
坦白地说,这是一个难以理解的混乱。
使用C ++语法的新方法在某种程度上缓解了该问题。
auto retFun () -> auto (*)(int) -> int {
return [](int x) { return x; };
}
新语法几乎是从左到右编写的,就像人们会读到的一样。
auto retFun
“ retFun是...”
() ->
“ ...一个不带参数并返回...的函数”
auto (*)
“ ...指向...的指针”
(int) ->
“ ...具有int参数并返回...的函数”
int
“ ...一个整数”。