我有一种感觉,lambda 的类型是函数指针。当我执行以下测试时,我发现它是错误的( 演示)。
#define LAMBDA [] (int i) -> long { return 0; }
int main ()
{
long (*pFptr)(int) = LAMBDA; // ok
auto pAuto = LAMBDA; // ok
assert(typeid(pFptr) == typeid(pAuto)); // assertion fails !
}
上面的代码是否缺少任何要点?如果不是,那么 typeof
用 auto
关键字推导的 lambda 表达式是什么?
原文由 iammilind 发布,翻译遵循 CC BY-SA 4.0 许可协议
未指定 lambda 表达式的类型。
但它们通常只是函子的语法糖。一个 lambda 被直接翻译成一个仿函数。
[]
里面的任何东西都变成了构造函数参数和functor对象的成员,而()
里面的参数变成了functor的operator()
的参数不捕获任何变量的 lambda(在
[]
中没有任何内容) 可以转换 为函数指针(如果那是您的编译器,MSVC2010 不支持此功能,但此转换是标准的一部分)。但是 lambda 的实际类型不是函数指针。这是一些未指定的函子类型。