什么是 lambda 函数类型? C++

What is lambda functions type? C++

查看我的代码:

#include <iostream>
#include <typeinfo>

int main() {
    auto x = [](int a, int b) -> bool{return a<b;};
    std::cout<<typeid(decltype(x)).name()<<std::endl;
}

这是打印 Z4mainEUliiE_。谁能解释为什么? x 的实际类型是什么?

lambda 的实际类型被指定为与 lambda 表达式相对应的 "unique closure type"。

未指定其名称。它的布局甚至没有完全指定。它几乎完全是一个实现定义的类型,一个人们通常不知道也不关心的名字。

当您考虑它时,您(开发人员)并不真的需要知道它的 "actual name" 是什么。大家可以参考一下就好了:

using my_lambda_type = decltype(x);

您的问题还有另一个方面,即除了实现定义的闭包类型之外,std::type_info::name 的行为本身也是实现定义的。您正在通过完全实现定义的机制为实现定义的类型打印实现定义的名称。

除了有关当前编译器实现的详细信息之外,您可以从中收集到的(C++ 方面的)信息非常少。