您可以在此上下文中解释哪种类型的L
。
换句话说,我可以使用哪种类型auto
关键字?
int main(){
int x=0;
auto L = [x] (int y)->bool{
return x>y;
};
return 0;
}
答案 0 :(得分:7)
在此上下文中,您可以使用C ++ 11中的任何内容而不是auto
,这意味着完全相同的类型。那是因为每个lambda表达式的类型是唯一的,未命名的类型。引用C ++ 11 5.1.2 / 3:
lambda-expression 的类型(也是闭包对象的类型)是一个唯一的,未命名的非联合 类类型 - 称为闭包类型 - 其属性如下所述。 ...
答案 1 :(得分:1)
您可以使用std::function
代替`auto,但您可能不想。
This article更详细地解释:
auto背后的基本原理是编译器知道类型...... 但你要么无法形容,要么不想。有一个 主要用例,你不能命名类型 - 使用lambdas。
然后文章说明了如何使用std :: function,但运行时间会受到惩罚。