编译器的 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.
所以,如果我们运行 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.