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

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

转载 作者:IT老高 更新时间:2023-10-28 11:34:12 24 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 关键字推导时,typeof 一个 lambda 表达式是什么?

最佳答案

未指定 lambda 表达式的类型。

但它们通常只是仿函数的语法糖。一个 lambda 被直接翻译成一个仿函数。 [] 里面的任何东西都会变成构造函数的参数和functor 对象的成员,() 里面的参数都会变成functor 的operator() 的参数.

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

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

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

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