编译器的 lambda 表达式的类型是什么?

What is the type of a lambda expression for the compiler?

所以,如果我们运行 gdb 上的源代码如下:

//...
auto myLambda1 = [&](int x){ printf("Hi, I got x=%d here\n",x);};
auto myLambda2 = [&](double y){ printf("Hi, I got y=%f here\n",y);};
//...

我会得到:

(gdb) ptype myLambda1
type = struct <lambda(int)> {
}
(gdb) ptype myLambda2
type = struct <lambda(double)> {
}

那么什么是编译器的 lambda 表达式?为什么是 struct

lambda 表达式的类型是 class 类型,但它没有名称。 class 最重要的特性是它有一个 public operator() 以便它可以在函数调用表达式语法中使用。

标准部分 [expr.prim.lambda.closure] 包含大量技术细节,该部分以

开头

The type of a lambda-expression (which is also the type of the closure object) is a unique, unnamed non-union class type, called the closure type, whose properties are described below.