long { return 0; } int ma-6ren">
gpt4 book ai didi

c++ - 在 C++11 中使用 "auto"推导出的 lambda 类型是什么?

转载 作者:太空狗 更新时间:2023-10-29 23:15:36 25 4
gpt4 key购买 nike

我认为 lambda 的类型是函数指针。当我进行以下测试时,我发现它是错误的(demo)。

#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 !
}

上面的代码是否遗漏了任何一点?如果不是,那么当使用 auto 关键字推导出一个 lambda 表达式时,typeof 是什么?

最佳答案

lambda 表达式的类型是未指定的。

但它们通常只是仿函数的语法糖。 lambda 直接转换为仿函数。 [] 中的任何内容都被转化为构造函数参数和仿函数对象的成员,而 () 中的参数被转化为仿函数的 operator() 的参数

不捕获变量([] 中没有任何内容)的 lambda 可以转换为函数指针(MSVC2010 不支持这个,如果那是你的编译器,但这种转换是标准的一部分)。

但是 lambda 的实际类型不是函数指针。它是一些未指定的仿函数类型。

关于c++ - 在 C++11 中使用 "auto"推导出的 lambda 类型是什么?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/28378572/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com