C++ 什么是lambda函数类型?C++;
请参阅我的代码:C++ 什么是lambda函数类型?C++;,c++,c++11,lambda,c++14,decltype,C++,C++11,Lambda,C++14,Decltype,请参阅我的代码: #include <iostream> #include <typeinfo> int main() { auto x = [](int a, int b) -> bool{return a<b;}; std::cout<<typeid(decltype(x)).name()<<std::endl; } #包括 #包括 int main(){ auto x=[](int a,int b)->bool
#include <iostream>
#include <typeinfo>
int main() {
auto x = [](int a, int b) -> bool{return a<b;};
std::cout<<typeid(decltype(x)).name()<<std::endl;
}
#包括
#包括
int main(){
auto x=[](int a,int b)->bool{return alambda的实际类型被指定为与lambda表达式相对应的“唯一闭包类型”
它的名称没有被指定。它的布局甚至没有被完全指定。它几乎完全是一个实现定义的类型,一个人们通常不知道也不关心的名称
当你考虑它时,你(开发人员)并不需要知道它的“实际名称”是什么。你可以很好地参考它:
using my_lambda_type = decltype(x);
您的问题还有另一个方面,除了实现定义的闭包类型之外,std::type_info::name
的行为本身就是实现定义的。您正在通过完全实现定义的机制为实现定义的类型打印实现定义的名称
除了当前编译器实现的细节之外,您可以从中获得的(C++)信息非常少。它正在打印类型…它是decltype(x)
。为什么您需要知道?请注意,如果您使用(int,int)生成第二个lambda
,它的名称将是Z4mainEUliiE0
,而不管返回类型或主体代码(假设为Linux/gcc)。同样,第三个将得到1
,而不是0
。。。