这个问题已经在这里有一个答案:
- 当与C ++ 11“自动”推导出什么是拉姆达的类型? 6个回答
有这样的代码:
auto fun = [](int x)->int {return x + 1; };
std::cout << typeid(fun).name() << std::endl;
其结果是: Z4mainEUliE_
但C ++ filt的似乎并没有解释是什么。 什么是lambda表达式的类型?
这个问题已经在这里有一个答案:
有这样的代码:
auto fun = [](int x)->int {return x + 1; };
std::cout << typeid(fun).name() << std::endl;
其结果是: Z4mainEUliE_
但C ++ filt的似乎并没有解释是什么。 什么是lambda表达式的类型?
§5.1.2/ 3的状态:
类型的λ-表达的(也是封闭的对象的类型)是一个独特的,无名不愈合类类型
它接着说更多,但是这是最重要的一点。 一个lambda基本上是一个匿名类的一个实例。
顺便说一句,你的拉姆达的源码形式为main::$_0
。
类型lambda函数的是由标准(§5.1.2)未指定的:
类型的λ-表达的(也是封闭的对象的类型)是一个独特的,无名不愈合CLASSTYPE -称为闭合类型-其特性如下所述。 这个类型不是汇总(8.5.1)。 封闭件类型是在最小的块范围,类范围,或命名空间中包含对应λ-表达范围中声明。
它接着列出确切属性闭合类型应该有。
因此没有一般类型lambda函数有。 编译器将生成未指定的名称为每个拉姆达功能的新仿函数类型
什么是lambda表达式的类型?
类型lambda表达式(所谓的封闭 )的是一个未命名的类型与由编译器自动生成的函数调用操作。 内部名称编译器会给出它是不确定的。
根据C ++ 11标准第5.1.2 / 3:
类型的λ-表达的(也是封闭的对象的类型)是一个唯一的, 不连无名类类型 -称为闭合类型-其特性如下所述。 这个类型不是汇总(8.5.1)。 封闭件类型是在最小的块范围,类范围,或命名空间中包含对应λ-表达范围中声明。 [...]
另请注意,该name()
的成员函数type_info
类(由返回的类型typeid()
也依赖于实现,且标准不要求它是有意义的人。
每个段落18.7.1:
const char* name() const noexcept;
9 返回 : 实现定义 NTBS。
10 备注 :该消息可以是一个空终止多字节字符串(17.5.2.1.4.2),适合的转换与显示作为wstring的(21.3,22.4.1.4)