我刚开始学习C++ 11中的新功能.我正在阅读C++ Primer(Stanley Lippman)中的lambdas并正在尝试它们.
我尝试了以下代码:
auto func() -> int (*) (){
//int c=0;
return []()-> int {return 0;};
}
int main(){
auto p = func();
}
Run Code Online (Sandbox Code Playgroud)
这段代码编译得很好.所以我猜没有任何捕获的lambdas只是由编译器生成为普通函数,我们可以使用它们的普通函数指针.
现在我更改了代码以使用捕获:
auto func() -> int (*) (){
int c=0;
return [=]()-> int {return c;};
}
int main(){
auto p = func();
}
Run Code Online (Sandbox Code Playgroud)
但这无法编译.使用g ++时出现以下编译错误:
main.cpp: In function ‘int (* func())()’:
main.cpp:6:31: error: cannot convert ‘func()::__lambda0’ to ‘int (*)()’ in return
return [=]()-> int {return c;};
Run Code Online (Sandbox Code Playgroud)
从错误中我可以理解,它不是生成的普通函数,它可能是一个带有重载调用操作符的类.或者是别的什么?
我的问题:编译器如何在内部处理lambdas?我应该如何传递使用捕获的lambda,即func()的返回值应该是什么?我目前无法想到一个用例,我需要使用这样的lambdas,但我只是想了解更多关于它们的信息.请帮忙.
谢谢.