C++可以用lambda在某种意义上实现函数的嵌套,不过是和直接在函数里定义函数是不一样的。
1
2
3
4
5
6
7
int foo(int x, int y)
{
auto goo = [=](){
return x + y;
};
return goo();
}
lambda实际上是定义了一个重载()运算符的类,然后实例化的时候把外层函数的局部变量当成员复制过去。
当然很多支持嵌套函数的语言(学名叫Closure)实际上还是这么干的。
不可以嵌套定义,可以嵌套调用。